`
bachmozart
  • 浏览: 110105 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang 网游服务器端socket设计问题

阅读更多
准备用erlang做网游的服务器端,遇到一个通信层设计的问题

erlang socket大多都是使用的被动模式,防止message flood问题

系统中会存在两种消息,一种是客户端和服务器的交互信息,就是简单的request-response模式,另外一种是系统游戏过程中产生的广播消息

如果采用erlang被动socket模式, recv()方法本身是阻塞等待客户端请求的,同时系统广播消息可能会随时产生,那么阻塞的进程就无法及时取到当前mailbox里的消息,发给客户端了

目前打算采用客户端同时开2条TCP连接的方式解决。一条用于处理交互信息,另一条只处理当前系统的广播消息

代价就是单台服务器能撑的同时在线用户数变少了,大家有没有更合理的方案呢
分享到:
评论
4 楼 hittyo 2009-11-10  
我们做游戏request-response是用php来实现的

erlang只做广播
3 楼 mryufeng 2009-09-24  
无需都在一个进程里面接受广播动作 然后再调用gen_tcp:send的。  gen_tcp:acccept send  和 os 的对等api一样 都支持多进程调用。
2 楼 mryufeng 2009-09-24  
广播进程直接调用 gen_tcp:send(Tcp)就好了
1 楼 bachmozart 2009-09-24  
感谢avindev同学提出的宝贵建议

我几乎忘记了有{active,once}这种模式

考虑了一下,如果使用active,once方式可能会遇到 系统广播消息和客户端交互请求在mailbox里排队的情况,客户端交互请求是需要尽快返回response的,那就需要selective recieve处理,似乎大量广播消息会影响到客户端的交互请求

相关推荐

Global site tag (gtag.js) - Google Analytics