网络游戏服务器设计思考

  最近想自己写一个基于boost asio的游戏服务器,看了很多开源项目的代码,最后采用了多线程,多io_service的架构,代码完成了90%了,越写感觉要面临的问题还是蛮多的,应该就是多线程带来的种种困扰。

  当然,这些困扰都来自于整个系统架构:一个io_service对应一个线程,一个线程管理多个session,这样一来,和单个io_service,单线程的架构是一样的,可以减少很多锁操作,而简单的通信,session可以完全不用顾虑去竞争io_service,所以代码里几乎没有用strand。

  这种写法首先要解决的就是跨io_service的消息处理,比如session A想要发送消息到session B,两个session分别由两个线程Thread A ,Thread B处理,这个问题比较好解决,通过主线程维护session列表和thread列表,发送消息的时候找到对应session的thread,对其io_service post一个消息就可以了。

  新的问题是考虑到逻辑处理,在读写共享资源的时候,势必要加锁来处理,而且还要保证消息处理的先后顺序,如果用单独的线程来处理,就要让多个net io线程来写逻辑线程的消息队列,这样也会让瓶颈回到单线程处理上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值