准备用erlang做网游的服务器端,遇到一个通信层设计的问题
erlang socket大多都是使用的被动模式,防止message flood问题
系统中会存在两种消息,一种是客户端和服务器的交互信息,就是简单的request-response模式,另外一种是系统游戏过程中产生的广播消息
如果采用erlang被动socket模式, recv()方法本身是阻塞等待客户端请求的,同时系统广播消息可能会随时产生,那么阻塞的进程就无法及时取到当前mailbox里的消息,发给客户端了
目前打算采用客户端同时开2条TCP连接的方式解决。一条用于处理交互信息,另一条只处理当前系统的广播消息
代价就是单台服务器能撑的同时在线用户数变少了,大家有没有更合理的方案呢
erlang socket大多都是使用的被动模式,防止message flood问题
系统中会存在两种消息,一种是客户端和服务器的交互信息,就是简单的request-response模式,另外一种是系统游戏过程中产生的广播消息
如果采用erlang被动socket模式, recv()方法本身是阻塞等待客户端请求的,同时系统广播消息可能会随时产生,那么阻塞的进程就无法及时取到当前mailbox里的消息,发给客户端了
目前打算采用客户端同时开2条TCP连接的方式解决。一条用于处理交互信息,另一条只处理当前系统的广播消息
代价就是单台服务器能撑的同时在线用户数变少了,大家有没有更合理的方案呢