首页 > 编程语言 >go模拟实现反向代理各种算法

go模拟实现反向代理各种算法

时间:2022-11-20 22:33:56浏览次数:40  
标签:HttpServer int LoadBalance Server util 算法 反向 func go

package util
type HttpServer struct {
    Host string
    Weight int
}
type LoadBalance struct {
    Server []*HttpServer
    CurrentIndex int
}
var MapWeight []int
func NewHttpServe(host string, weight int) *HttpServer{
    return &HttpServer{Host: host,Weight: weight}
}
func NewBalance() *LoadBalance {
    return &LoadBalance{Server: make([]*HttpServer,0)}
}
func (this *LoadBalance) AddServer(server *HttpServer){
    this.Server = append(this.Server,server)
}

调用方

package main

func main() {
    //lib:= util.NewBalance()
    //newHttp1:=util.NewHttpServe("http://localhost:9091",5)
    //newHttp2:=util.NewHttpServe("http://localhost:9092",7)
    //newHttp3:=util.NewHttpServe("http://localhost:9092",10)
    //newHttp4:=util.NewHttpServe("http://localhost:9092",20)
    //lib.AddServer(newHttp1)
    //lib.AddServer(newHttp2)
    //lib.AddServer(newHttp3)
    //lib.AddServer(newHttp4)
    
}

 

 

1。各种基础模拟

//随机算法随机一个ip地址
//func (this * LoadBalance) RandromIpSoft() int {
//    ipNum:=len(this.Server)
//    rand.Seed(time.Now().UnixNano())
//    index:=rand.Intn(ipNum)
//    return index
//}
//iphash算法
//func (this *LoadBalance) RandromIpSoft(ip string ) uint32 {
//    ipNum := crc32.ChecksumIEEE([]byte(ip))
//    index:= ipNum%uint32(len(this.Server))
//    return index
//}
//加权算法
//func (this *LoadBalance) RandromIpSoft() []int {
//    for k,val:=range this.Server {
//        for i:=0;i<val.Weight;i++ {
//            MapWeight = append(MapWeight,k)
//        }
//    }
//    return MapWeight
//}
//加权算法改良版
//func (this *LoadBalance) RandromIpSoft() *HttpServer {
//    var mapList []int
//    sum:=0
//    for _,val:=range this.Server {
//        sum+=val.Weight
//        mapList=append(mapList,sum)
//    }
//    rand.Seed(time.Now().UnixNano())
//    rad:= rand.Intn(sum)
//    for index,val:=range mapList{
//        if rad < val {
//            return this.Server[index]
//        }
//    }
//    return this.Server[0]
//}
//轮询
//func (this * LoadBalance)RoundFrom() int {
//    index:= (this.CurrentIndex+1)%len(this.Server)
//    return index
//}
//加权轮训
//func Lunxun(){
//    arrWeight:=[]int{3,1,1}
//    sliceNode:=make([]int,0)
//
//    for k,v:=range arrWeight{
//        for i:=0; i<v;i++ {
//            sliceNode= append(sliceNode,k)
//        }
//    }
//    CurrIndex:=0
//    var point int
//    for CurrIndex < 10 {
//        if point >=len(sliceNode) {
//            point=0
//        }
//        log.Println(sliceNode[point])
//        point+=1
//        time.Sleep(1* time.Second)
//        CurrIndex+=1
//    }
//}

 

标签:HttpServer,int,LoadBalance,Server,util,算法,反向,func,go
From: https://www.cnblogs.com/zh718594493/p/16909833.html

相关文章

  • 实验四:神经网络算法实验
    【实验目的】理解神经网络原理,掌握神经网络前向推理和后向传播方法;掌握神经网络模型的编程实现方法。【实验内容】1.1981年生物学家格若根(W.Grogan)和维什(W.Wirth)发现了......
  • golang中io的使用
    一、读取小文件:ioutil.ReadFile()读取文件的内容并显示在终端(使用ioutil一次将文件读取到内存中),这种方式适用于读取小文件:packagemainimport("fmt""io/iou......
  • a_good_idea: NJUPT-CTF
    下载文件发现是一个png图片  然用r查看属性没有任何东西,就想利用010editor打开看看,发现在末尾FFD9之后有一堆负载文件 然后就像利用binwalk和foremost试一试,......
  • golang的GC
    golang采用三色标记法进行垃圾清理GC过程分为标记过程和清理过程产生错误的情况:黑色对象引用白色对象灰色对象到白色对象的引用被破坏破坏这两个条件之一就可以避免......
  • Golang实现hashmap
    golang实现hashmap思路:数组+链表->HashMap1.先看一下go里的map是怎么实现的go实现map采用拉链法的实现,如下图所示,键值对中的键会经过一个哈希函数,哈希函数会帮我们找到......
  • [排序算法] 快速排序 (C++) (含三种写法)
    快速排序解释快速排序QuickSort与归并排序一样,也是典型的分治法的应用。(如果有对归并排序还不了解的童鞋,可以看看这里哟~归并排序)❤❤❤快速排序的分治模式1、......
  • DLGOPENGL-05
    在我们开始直接绘制之前,我们首先需要删除图像,因为如前一课所述,我们会在每次循环运行时重新绘制场景。glClear函数删除包含图像信息的缓冲区。我们片段的颜色信息(片段与屏幕......
  • golang接收文件脚本
    golang接收文件脚本packagemainimport("io""os""fmt""io/ioutil""net/http")//https://www.jianshu.com/p/b49cc19d26f0参考资料......
  • DES和AES加密:指定键的大小对于此算法无效
    “System.ArgumentException”类型的未经处理的异常在mscorlib.dll中发生其他信息:指定键的大小对于此算法无效。在看DES和AES加密的时候,找了个加密的Demo,自己试验的时......
  • python算法题1:给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标
    题目:给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值index1和index2,其中index1必须小于index2。 说明: ......