【从零开始学Skynet】实战篇《球球大作战》(五):gateway代码设计(上)

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

   

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值