- 论坛徽章:
- 0
|
一般游戏服务器都是长连接服务器和业务逻辑服务器分离的吧
业务逻辑服务器要给一个玩家发送消息的时候,要知道这个用户连接到了哪个connector,一般有两种方法
1. 通过hash算法,客户端连接的时候也通过这个hash算法
2. 用一个register server或者router server来保存用户的连接信息,后端服务器要发送消息给玩家的时候就查询下这个服务
这两种方式各有优劣
前者优点是实现简单,性能高,不用任何网络请求,只要本地计算就可以定位一个用户。缺点是不够灵活,用户只能连接固定的ip,而且一旦一个connector挂了,这个服务器上的所有客户端同时涌上来了,相当于制造ddos啊,另外,动态扩容也不好办,要踢掉一部分用户
第二种呢,实现上比较复杂,比如register server怎么实现高可用,register server重启之后需要重新重新注册所有玩家信息,这个过程会不会太久,这段期间,后端服务器是暂时无法定位玩家了。如果采用集群,分片+备份,这又太复杂了吧。
其实我没做过游戏服务器,之前开发过消息推送服务器,一开始是采用了第二种方案,有一个中心的register server,后来改成第一种方案了。
不知道大家有没有更好的办法,分享下经验 |
|