8.4 Zinx-V0.8代码实现
所以应该在Connection的StartReader()
方法中修改:
/*
读消息Goroutine,用于从客户端中读取数据
*/
func (c *Connection) StartReader() {
fmt.Println("Reader Goroutine is running")
defer fmt.Println(c.RemoteAddr().String(), " conn reader exit!")
defer c.Stop()
for {
//读取客户端的Msg head...
//拆包,得到msgid 和 datalen 放在msg中...
//根据 dataLen 读取 data,放在msg.Data中...
//得到当前客户端请求的Request数据
req := Request{
conn:c,
if utils.GlobalObject.WorkerPoolSize > 0 {
//已经启动工作池机制,将消息交给Worker处理
c.MsgHandler.SendMsgToTaskQueue(&req)
} else {
//从绑定好的消息和对应的处理方法中执行对应的Handle方法
go c.MsgHandler.DoMsgHandler(&req)
}
}
这里并没有强制使用多任务Worker机制,而是判断用户配置WorkerPoolSize
的个数,如果大于0,那么我就启动多任务机制处理链接请求消息,如果=0或者<0那么,我们依然只是之前的开启一个临时的Goroutine处理客户端请求消息。