服务器排队系统的一点想法
今天突然想到的,先记下来。
以前考虑过这个问题,写过一篇 blog 。我今天想到,其实可以把排队完全独立出来。和原有系统分离。这样,所有不支持排队的游戏系统,只要简单加上就可以用了,不用对系统结构做大的调整。
想法是这样的:
游戏系统需要估计自己的环境大约可以支持一定时间段多少人可以进入。这个用来估算每个新用户的大致等待时间。
游戏系统采用一个以时间为演算因子的序列 key ,用来做进入的验证。只有持有这个 key 的用户才认为是经过排队的。允许进入。
排队服务器独立安置,当用户直接连接游戏服务器遇到拥堵时,服务器简单记录他的用户名,和等待鉴权的口令,然后让其去排队服务器排队。如果用户再次连接上来而没有经过排队。因为有用户名记录,所以可以在帐户信息里做记录。之后的处理就比较简单了。
用户的这个流程(先尝试游戏服务器,再被转到排队服务器,并不可以二次尝试),这个过程由用户 Client 保证。用户不修改 Client 是不会违规的。游戏服务器只是记录那些用异常手法插队的用户。
在排队服务器,首先向第一次进来的用户发放序号,以及通知大约等待时间。并记录用户的用户名,以及一个等待鉴权的口令。用户则可以离线,由 Client 等待指定时间再上来排队。为何要提交鉴权口令?因为要防止有人恶意冒充插队。当排队服务器检测到用户不守规定不在规定等待时间内重复尝试,则回头鉴定用户是否的确是本人,而后再决定在其帐号里做违规记录。
等待用户快排到了,则可以向排队服务器保持长连接,直到排队服务器发放进入游戏服务器的口令。他就可以离开队伍,前去游戏了。
这样做这个系统,可以让排队系统和游戏足够分离。便于开发。不受游戏服务器的构架变换影响,也更容易部署。
Comments
Posted by: 宁波LED | (11) March 25, 2011 07:45 PM
Posted by: 红色警戒 | (10) March 23, 2011 12:46 PM
Posted by: kmplayer | (9) March 18, 2011 02:29 PM
Posted by: Detox foot spa | (8) March 18, 2011 11:00 AM
Posted by: 闹钟 | (7) March 17, 2011 03:55 PM
Posted by: Atry | (6) March 16, 2011 11:17 PM
Posted by: 中国原创游戏部落格 | (5) March 16, 2011 04:42 PM
Posted by: Xw.Y | (4) March 16, 2011 04:21 PM
Posted by: Xw.Y | (3) March 16, 2011 04:04 PM
Posted by: kilnt | (2) March 16, 2011 03:05 PM
Posted by: halida | (1) March 16, 2011 02:16 PM