游戏架构之前端接入层

在前边几篇文章已经给大家讲过,我们游戏通过进程间异步通信的方式来实现瓶颈的最大程度的减小。


前端接入层主要的做什么呢?

主要是数据包的有效性验证和维持与玩家的长连接。


如何做有效性的验证,我们使用过和前端具体的协议定制。然后通过我们具体的协议包头+包体的来计算。

如果我们的计算和我们协议不一致,直接就断开和客户端的连接,发送rst信号,客户端会被通知到,进程会hub状态,


在这里,我们这个数据包分析是可以通过数据type来进行调用具体的数据分析函数,如果是我们的tcp设计的协议,就会走auth回调函数,如果是http,那么就走parshttp协议。等


那我们如何维持长连接。


当前端接入,我们会对每个accept后的操作符进行分配一段内存,保持连接,等到这个操作符上有数据,就会通过具体的内存来进行一些操作了。

如果该操作符有错误,那么我们就会通过epoll_clt 来进行删除该操作符,然后同时删除该段内存。


具体的 epoll代码实现我就不再详细输了,基本模式都是epoll_create,初始化后,我们在不停循环下,使用epoll_wait,监听事件,进行从数据操作符上读取数据,然后分析,和我们的业务进程进行通信。


而其他业务进程, 也会不停的从消息队列里去数据。 这样,我们就实现了 网络模块和业务模块的有效分离。使得我们的业务在单进程单线程下哦能每秒钟处理20万个数据包。


目前我们外网玩家压力测试能达到4000多人,cpu在80%了。


在网络模块,我们需要深刻理解socket下的一些很多细节,不如我们发送数据是否全部从发送缓冲区发送出去等,要发送什么信号给接入socket等等。需要很长时间一段时间积累才能理解到位。


本章节描述不是很深刻。我是主要负责改动,一本原型差不多没什么大问题了。

更多文章,欢迎访问:

http://blog.csdn.net/wallwind



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值