结构体&函数
多路复用结构体:
|
|
cMux用于监听某个端口,同时通过machersListener区分不同类型的请求,目前主要有两种请求:
- pg client连接
- grpc请求
MuxConn封装每个client连接。
初始化cmux
|
|
添加match函数
|
|
接收请求
|
|
匹配协议
|
|
这里使用了muc.getSniffer, 会将从conn读取的数据缓存在本地buffer中,如果第一次match失败的话,第二次match会调整bufferSize, 后续的读取就会先读取本地buffer,从而达到了可以多次进行match的目的。
匹配成功
|
|
- 将muc传递给muxlistner的connc管道
- muxlistener的Accept函数监听管道connc,从而获取了一个新的客户端连接
小结
这里比较复杂点的算法就是多路复用过程中,如何对socket进行重复读取,这里使用的是本地buffer缓存操作,通过每次设置bufferlen的长度,保证可以每个新的sniffer都可以重入。
有一个小问题,就是正常处理请求的时候,也会先判断buffer,然后再使用conn进行read。
|
|