论坛首页 综合技术论坛

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

浏览 5486 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-24  
准备用erlang做网游的服务器端,遇到一个通信层设计的问题

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

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

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

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

代价就是单台服务器能撑的同时在线用户数变少了,大家有没有更合理的方案呢
   发表时间:2009-09-24  
感谢avindev同学提出的宝贵建议

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

考虑了一下,如果使用active,once方式可能会遇到 系统广播消息和客户端交互请求在mailbox里排队的情况,客户端交互请求是需要尽快返回response的,那就需要selective recieve处理,似乎大量广播消息会影响到客户端的交互请求
0 请登录后投票
   发表时间:2009-09-24  
广播进程直接调用 gen_tcp:send(Tcp)就好了
0 请登录后投票
   发表时间:2009-09-24  
无需都在一个进程里面接受广播动作 然后再调用gen_tcp:send的。  gen_tcp:acccept send  和 os 的对等api一样 都支持多进程调用。
0 请登录后投票
   发表时间:2009-11-10  
我们做游戏request-response是用php来实现的

erlang只做广播
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics