前言:
上篇文章向大家介绍怎么样用go实现一个最简单的socket服务器,接下来我们会讲到socket编程中最重要的事情–分包处理 已经把所有代码整合了,希望给个星星支持一下 microSocket。
分包处理的必要:
为什么我们需要分包处理呢,一个socket的连接就相当于一个水管,数据从里面源源不断的流出来,服务端就像一个水盆一样不断地接收数据并处理。
现在我们来考虑一个这么一个场景 客户端告诉服务端两个请求 ‘aaaaa’ ‘bbbbbb’ 服务端当然就是接收数据啦,可是服务端心情好一下子接收了所有的数据,就相当于是 ’aaaaabbbbbb’,这下好了服务端就把这个当做一个请求来处理了,要是不重要还好,要是第二条协议很重要,就gg了,如果服务端代码不够严谨可能整个逻辑都混乱了。
这个时候我们就需要一般逻辑来把我们服务端接收到的数据分开来确保每一块数据都是单独的一个包,这也就是我为什么说这是socket编程最重要的一个环节了。
分包处理的实现:
- 设置包头分割
- 设置标志位尾部分割
一般分包处理主要有以上两种,我们框架用到的是第一种,废话不多说,上代码
func (this *Msf) connHandle(conn net.Conn, sess *session) {
defer conn.Close()
var errs error
tempBuff := make([]byte, 0)
readBuff := make([]byte, 14)
data := make([]