我正在设计一个扑克webapp,其中有多个用户共享游戏,并分布在许多服务器上。假设我想在单个服务器中维护游戏的状态 - 有没有一种方法可以“路由”或“引导”登录用户与托管游戏的机器进行交互?游戏涉及通过AJAX进行的大量交互式响应,因此不能在多个服务器上协调数据库中的状态。 (如果您认为可以使用分布式缓存跨多个服务器维护状态 - 那么我也对此持开放态度)。
为了简化,假设webapp是用Java实现的。
如果您可以在答案中提供示例库和有关路由的信息,那将会很有帮助。 (例如,为什么或为什么Apache Zookeeper是处理这个问题的合适方法)。
答案 0 :(得分:0)
在负载均衡器级别,有sticky sessions
的概念,由负载均衡器(如HAProxy)支持,这将确保同一用户始终路由到同一服务器(使用https可能更难)
但是,很难确保最终登录到不同服务器的2个用户在同一台服务器上播放。这也意味着如果服务器出现故障,两个玩家的游戏都会丢失。也许您应该将游戏保留在分布式缓存上并处理故障?
据我所知,在HAProxy中,可以使用查询字符串将请求路由到适当的服务器。 http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
但是你最好使用无状态请求,并能够处理来自许多服务器的请求。