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

崇安网站建设WordPress部署百度广告

崇安网站建设,WordPress部署百度广告,建设银行网站建设情况,wordpress访问非常慢文章目录 前言接口结构体接口实现项目地址最后 前言 你好,我是醉墨居士,我们上篇博客实现了任务管理器的功能,接下来这篇博客我们将要实现请求分发模块的开发 接口 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.yayakq.cn/news/392340/

相关文章:

  • 开发 网站 费用长沙网站制作公司
  • 用ps怎么做短视频网站免费万能视频提取器
  • 手机网站开发合同网站分类主要有哪些
  • 北京外贸网站建设公司湖南住房城乡建设部网站
  • 企业静态网站源码东阳高端营销型网站建设品牌
  • 网站收录下降原因网站如何运作
  • 河南建设集团网站青岛建网站多少钱
  • 做网站备案哪些条件淄博服装网站建设
  • 网站留言板有什么用厦门外贸网站建设 之家
  • 外贸网站建设行业发展情况微信5000人接推广费用
  • 哈尔滨企业建站系统百度谷歌seo优化
  • frontpage做网站中信建设有限责任公司财务情况
  • 大连响应式网站制作注册网站卖钱最多的人
  • 网站自己建机房分毫报价小程序
  • 怎样申请一个免费的网站空间网站建设的进度计划书
  • 广州市网站建设制作费用wordpress admin-ajax.php
  • iis搭建网站时图片网站seo
  • 网站友情链接网站维护和制作怎么做会计分录
  • 保定seo网站排名分销商城系统的特点
  • 深圳协会网站建设做借贷网站平台
  • 网站建设服务费进入什么科目特产网站建设策划书
  • 化妆品网站开发流程和进度安排文汇网站建设
  • 索菲亚全屋定制官方网站所以免费爱做网站
  • 漂亮的博客网站模板站长交流平台
  • 怎么查网站注册信息python 网站架构
  • 金阊seo网站优化软件关于网站内容建设的正确说法
  • 天津建设银行东丽网站上海有几个区域
  • 公司做网站留言板书店网站建设可行性分析
  • 外贸服装接单网站天辰建设网站
  • 开发个网站开票名称是什么个人养老保险网上怎么缴费