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

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

时间:2022-11-22 11:07:27浏览次数:43  
标签:return point int LoadBalance Server 算法 反向 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
// }
//}
//改良版
//func Lunxu(){
// sliceData:=[]int{3,4,5}
// sliceHandle:=make([]int,0)
// sum:=0
// for _,v:=range sliceData {
// sum+=v
// sliceHandle=append(sliceHandle,sum)
// }
//
// CurrentIndex:=1
// point:=1
// max:=sliceHandle[len(sliceData)-1]+1
// var resIndex int
// for CurrentIndex < 100 {
// if point >= max {
// point=1
// }
// mo:=(point%max)
// CurrentIndex++
// point++
// for k,v:=range sliceHandle {
// if mo <= v {
// resIndex=k
// break
// }
// }
// fmt.Println(resIndex)
// time.Sleep(1*time.Second)
// }
//}

 

标签:return,point,int,LoadBalance,Server,算法,反向,func,go
From: https://blog.51cto.com/u_11635800/5877042

相关文章

  • 1.go做反向代理
    后端服务器代码packagemainimport("log""net/http""os""os/signal")typewebHandlerstruct{}func(webHandler)ServeHTTP(whttp.ResponseWriter,re......
  • Golang学习日志 ━━ 理解依赖包的管理(mod/非mod)和加载方式(项目路径、相对路径、绝对
    go有很多种方法调用依赖包,mod又加入了对包的版本管理。方式太多不免有令人迷惑和混乱的地方,希望本文能帮助大家了解目前使用规则一、mod/非mod管理方式go提供了两种项目......
  • go安装redis扩展
    1.在github.com网站找到对应的扩展【goget下载】【https://github.com/gomodule/redigo】 2.在本地环境安装go的环境变量下安装使用命令【确认git已经安装成功】   3.......
  • go 实现爬虫
    一:使用go获取远程图片存储在本地案例1>生成随机数len:=32bytes:=make([]byte,len)r:=rand.New(rand.NewSource(time.Now().Unix()))fori:=0;i<len;i++{......
  • 算法2:Hanoi塔
    汉诺(Hanoi)塔一、背景介绍在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针......
  • 24.基于数据结构和算法的深入【双元】(1)
                                                         ......
  • 每日算法之二叉树中和为某一值的路径(一)
    JZ82二叉树中和为某一值的路径(一)代码packageesay.JZ82二叉树中和为某一值的路径1;importjava.util.*;classTreeNode{intval=0;TreeNodeleft=......
  • CentOS6.4安装Golang环境
    什么是Go?  Go是一门并发支持、垃圾回收的编译型的系统编程语言,目的是为了创造一门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点的一门编程语言。......
  • 代码随想录算法训练营Day05|242. 有效的字母异位词、349. 两个数组的交集、202. 快乐
    代码随想录算法训练营Day05|242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和242.有效的字母异位词题目链接:242.有效的字母异位词题干要求两字......
  • 从 docker 容器反向生成 docker-compose yml 文件
    问题场景docker-compose.yml被不小心删除了,但是容器还在没有使用docker-compose管理的容器现在想迁移到docker-compose上反向生成docker-compose.yml文件使用......