当前位置: 首页 > news >正文

柳州专业做网站东莞关键词优化平台

柳州专业做网站,东莞关键词优化平台,毕设可以是仿照其他网站做吗,软装设计师主要做什么文章目录 前言接口结构体接口实现项目地址最后 前言 你好,我是醉墨居士,我们上篇博客实现了任务管理器的功能,接下来这篇博客我们将要实现请求分发模块的开发 接口 trait/dispatcher.go type Dispatcher interface {Start()Dispatch(conn…

文章目录

  • 前言
  • 接口
  • 结构体
  • 接口实现
  • 项目地址
  • 最后

前言

你好,我是醉墨居士,我们上篇博客实现了任务管理器的功能,接下来这篇博客我们将要实现请求分发模块的开发

接口

trait/dispatcher.go

type Dispatcher interface {Start()Dispatch(connQueue chan Connection)BatchDispatch(conn Connection) errorSetHeaderDeadline(deadline time.Time)SetBodyDeadline(deadline time.Time)ChooseQueue(conn Connection) chan <- ConnectionCommit(conn Connection)
}

结构体

gcore/dispatcher.go

// Dispatcher 请求分发模块,负责读取客户端连接的数据,并对数据进行拆包转换成消息格式,然后分发给下游的任务处理模块对消息进行业务处理
type Dispatcher struct {headerDeadline time.TimebodyDeadline time.TimeconnQueue []chan trait.ConnectiontaskMgr trait.TaskMgr
}// NewDispatcher 创建一个请求分发器
func NewDispatcher(taskMgr trait.TaskMgr) *Dispatcher {connQueue := make([]chan trait.Connection, global.Config.DispatcherQueues)for i := 0; i < len(connQueue); i++ {connQueue[i] = make(chan trait.Connection, global.Config.DispatcherQueueLen)}return &Dispatcher{connQueue: connQueue,taskMgr: taskMgr,}
}

接口实现

gcore/dispatcher.go

// Start 启动请求分发模块
func (d *Dispatcher) Start() {for i := 0; i < len(d.connQueue); i++ {for j := 0; j < global.Config.DispatcherQueueLen; j++ {go d.Dispatch(d.connQueue[i])}}
}// StartDispatcher 分发连接数据
func (d *Dispatcher) Dispatch(connQueue chan trait.Connection) {// 从conn中读取数据,并将数据提交给taskMgr处理for conn := range connQueue {d.BatchDispatch(conn)}
}// BatchDispatch 批量读取连接中的数据,并封装成请求,然后分发请求
func (d *Dispatcher) BatchDispatch(conn trait.Connection) error {for time.Now().After(d.headerDeadline) {header := make([]byte, 4)// 设置header读取超时时间conn.SetReadDeadline(d.headerDeadline)_, err := io.ReadFull(conn, header)if err != nil {if netErr, ok := err.(net.Error); ok && netErr.Timeout() {// 数据包读取超时return nil}return err}// 设置body读取超时时间conn.SetReadDeadline(d.bodyDeadline)// 读取长度dataLen := binary.BigEndian.Uint16(header[2:4])// 读取数据body := make([]byte, dataLen)	_, err = io.ReadFull(conn, body)if err != nil {return err}msg := gpack.Unpack(header, body)// 提交消息,处理数据request := NewRequest(conn, msg)d.taskMgr.Submit(request)}return nil
}// SetHeaderDeadline 设置header读取超时时间
func (d *Dispatcher) SetHeaderDeadline(deadline time.Time) {d.headerDeadline = deadline
}// SetBodyDeadline 设置body读取超时时间
func (d *Dispatcher) SetBodyDeadline(deadline time.Time) {d.bodyDeadline = deadline
}// ChooseQueue 选择处理连接的队列
func (d *Dispatcher) ChooseQueue(conn trait.Connection) chan <- trait.Connection {// 负载均衡,选择队列return d.connQueue[conn.ID() % int32(len(d.connQueue))]
}// Commit 提交连接到队列
func (d *Dispatcher) Commit(conn trait.Connection) {d.ChooseQueue(conn) <- conn
}

项目地址

Github:https://github.com/zm50/gte
Giee:https://gitee.com/zm50/gte

最后

我是醉墨居士,我们完成了基本的请求分发器的开发,希望对你有所帮助,也希望你有所收获

http://www.ds6.com.cn/news/81810.html

相关文章:

  • 视频网站怎么做压力测试搜狗收录提交入口网址
  • 建筑工程网上保健网站互联网100个创业项目
  • 驻马店 网站制作百度站长工具
  • wordpress网站程序员网络推广的调整和优化
  • 用java做网站可以免费广告投放网站
  • win7网站后台无法编辑seo人员培训
  • 南京建设工程信息网站深圳seo关键词优化外包公司
  • 招商加盟网站系统最近的国际新闻热点
  • 怎样做彩票网站代理二十条优化措施
  • 网站定位的核心意义seo效果最好的是
  • 最新网站技术天津谷歌优化
  • 响应式网站建设精英进入百度官网
  • 网站建设改版 gov.cn上海百度推广
  • 浙江省建设门户网站长春百度推广公司
  • 域名和网站空间9个广州seo推广神技
  • 新手做网站最简单流程国内免费域名注册网站
  • 做擦边球网站会不会违法呢企业邮箱账号
  • amazon免费虚拟机做网站广告代理公司
  • 字体设计网站有哪些免费小红书搜索优化
  • 重庆模板建站定制网站中囯军事网
  • 南京地区网站开发产品推广渠道
  • 武汉seo计费管理qq群排名优化
  • 政协网站建设功能上海百度搜索优化
  • 网站你懂我意思正能量晚上不用下载直接进入烟台seo外包
  • wordpress搭建电影网seo经验
  • 网站域名行业动态太原高级seo主管
  • 2017年网站推广怎么做网站优化外包费用
  • 网站优化怎么做关键词排名湖南企业竞价优化公司
  • 网站点击按钮回到页面顶部怎么做seo面试常见问题及答案
  • 淮北论坛房产厦门百度关键词seo收费