原作者视频地址:zinx-Golang轻量级TCP服务器框架
本人为自学整理的文档,梳理思考开发框架的基本思路,方法,以及视频中不理解的地方。
若想学习,强烈建议直接观看原作视频即可。
可在下方留言交流。

1.目的

这个东西是什么?

客户端与server链接时候,客户端发送过来消息:
原来:①StartReader()解析消息+go 消息处理 ----> ②StartWriter()回复客户端
现在:①StartReader()解析消息---->②采用工作池方式进行消息处理 ----> ③StartWriter()回复客户端

为什么要这样做?

如果按照我们之前的方式,每链接一个客户端,就会启动一个go Reader()和一个go Writer()。如果再有消息过来得话,还会开启go DoMsgHandler()。
如果此时,一下链接进来10W客户端。肯定会一下子启动20W个Reader()和Writer()协程。但是这两个函数都是阻塞式的发送和接受,阻塞的时候,并不会占用CPU。
但是,如果这10W个客户端集体发送很多个请求,若不对go DoMsgHandler()协程数量做控制的话,就会瞬间启动超多协程,击垮服务器。
我们添加,这个工作池的作用,就是为了使消息处理的Gourtine的数量变成可控的,从而可以调成出最佳性能。

2.思路

在这里插入图片描述

如图所示
开辟N个worker,再给每一个worker开辟自己的可缓冲的消息任务队列(channel)
当client的请求过来的时候,我们将数据封装成request之后,就放入其中的任一队列(或者随机放、或者取任务最少的通道放)
这样就使得DoMsgHandler所启动的协程是可控的,以便达到最佳性能

3.实现

源码,直接看最终zinx的github代码即可。
在这展示,不方便阅读。