1、协议格式
在写代码之前,我们要先了解什么是协议,协议就是 “客户端向服务端发起的登录请求”,那么登录请求是什么样子的呢?这得先从TCP数据流说起,客户端发起的请求,就是一些二进制数据。
(1)TCP粘包现象
TCP协议是一种基于数据流的协议,举例来说,如果客户端分两次发送“1234”和“5678”这两条消息。服务端可能一次性接收到“12345678”;也可能先只收到“12”,过一会儿才收到“345678”。
游戏的网络模块需要实现数据切分的功能,具体有三种方法,如下表所示:
| 方法 | 说明 |
| 长度信息法 | 每个数据包前面加上长度信息,每次接收到数据后,先读取表示长度的字节,如果缓冲区的数据长度大于要去的字节数,则取出相应的字节,否则等待下一次接收(此为最常用的方法) |
| 固定长度法 | 每次都以相同的长度发送数据,假设规定每条信息的长度都为10个字符,那么“hello”、“12”这两条信息可以发送成“hello.....”、“12.......”,其中的“.”表示填充字符,只为凑数没有实际意义,接收方每次取10个字符,作为一条消息去处理 |
| 结束符号法 | 规定一个结束符号,作为消息间的分隔符。假设规定结束符号为“$”,那么“hello”、“12”这两条信息都可以发送成“hello$”、“12$”。接收方不停地读取数据,知道“$”出现为止,并且使用“$”去分割消息。(该方法最简单直观,本项目都使用该方法) |
(2)协议格式
本项目中都会使用字符串协议格式,每条消息由“\r\n”作为结束符,消息的各个参数用英文逗号分隔,如下图所示:

- 参数 login:登录协议
- 参数101:要登录的玩家id
- 参数134:密码
后续会实现编码解码方法,让协议字符串与Lua表互相转换。
2、连接类和玩家类
&n

文章介绍了TCP数据流的粘包现象以及解决方法,包括长度信息法、固定长度法和结束符号法。在游戏网络模块中,选择了使用结束符号法,以特定字符作为消息分隔。协议格式采用字符串,以
为结束符,参数用逗号分隔。同时,文章提到了连接类和玩家类的设计,用于管理客户端连接和已登录玩家的信息,实现了连接和玩家信息的双向查找。最后,详细阐述了接收客户端连接的过程,包括初始化监听、客户端连接、接收客户端消息以及处理客户端协议的流程。
最低0.47元/天 解锁文章
2660

被折叠的 条评论
为什么被折叠?



