浏览 5486 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-24
erlang socket大多都是使用的被动模式,防止message flood问题 系统中会存在两种消息,一种是客户端和服务器的交互信息,就是简单的request-response模式,另外一种是系统游戏过程中产生的广播消息 如果采用erlang被动socket模式, recv()方法本身是阻塞等待客户端请求的,同时系统广播消息可能会随时产生,那么阻塞的进程就无法及时取到当前mailbox里的消息,发给客户端了 目前打算采用客户端同时开2条TCP连接的方式解决。一条用于处理交互信息,另一条只处理当前系统的广播消息 代价就是单台服务器能撑的同时在线用户数变少了,大家有没有更合理的方案呢 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-09-24
感谢avindev同学提出的宝贵建议
我几乎忘记了有{active,once}这种模式 考虑了一下,如果使用active,once方式可能会遇到 系统广播消息和客户端交互请求在mailbox里排队的情况,客户端交互请求是需要尽快返回response的,那就需要selective recieve处理,似乎大量广播消息会影响到客户端的交互请求 |
|
返回顶楼 | |
发表时间:2009-09-24
广播进程直接调用 gen_tcp:send(Tcp)就好了
|
|
返回顶楼 | |
发表时间:2009-09-24
无需都在一个进程里面接受广播动作 然后再调用gen_tcp:send的。 gen_tcp:acccept send 和 os 的对等api一样 都支持多进程调用。
|
|
返回顶楼 | |
发表时间:2009-11-10
我们做游戏request-response是用php来实现的
erlang只做广播 |
|
返回顶楼 | |