我已经使用WCF net.tcp和WPF作为前端创建了一个在线扑克系统。它的效果很好,但是当我将前端转换为Silverlight时,我觉得有一些可以改进的地方。
我对其他架构师的问题之一是,如何刷新游戏大厅?扑克游戏大厅会不断更新统计信息,例如玩家数量,每小时的手数和翻牌百分比。
由于在任何给定时间可能正在处理数百个游戏,因此我不确定每5秒返回一次完整的游戏列表(轮询)是否是最佳选择。我在考虑使用增量查询,因为许多游戏都不会更新状态(例如:桌上没有玩家)。
我正在考虑使用更新时间,因此每次客户端(可能是数百甚至数千!)轮询时,仅返回在5秒,10秒或更长时间内更新的记录。
当然,游戏大厅客户将负责协调新数据,但是我认为这可以减轻游戏服务器的一些负担。
有任何想法吗?
最佳答案
您可能选择一种方法,其中客户端在服务器上注册以进行周期性更新。因此,服务器将为服务合同提供客户端必须实施的回调合同(双工合同)。有关详细信息,请参见here。
另一方面,使用来自Silverlight客户端的双工合同可能很困难(我不确定是否完全可能),因此以更新时间间隔进行轮询是合法的方法。服务器应发送当前时间戳以及轮询周期的响应数据,客户端将随其下一个请求一起发送回该时间戳,以指示自何时请求更新数据。避免比较客户端和服务器时间。