弹簧腹板水平缩放

时间:2017-06-05 13:50:33

标签: java spring-boot apache-camel activemq

我面临建筑假设的问题。小背景: 我正在编写一个游戏服务器,可以为指定的玩家创建房间,并在该房间内(websocket),服务器正在监听任何事件(例如玩家丢失,互联网断开连接等)。整体性是可扩展的,因此在一些LB监督下将部署多个Tomcat节点。 目前我已经把这个过程想象成(记得关于tomcat集群):

  1. 客户端通过REST API登录GameServer,会话保存在所有节点之间共享的RedisDB中。服务器返回HTTP 200。

  2. 客户已登录系统,他决定搜索游戏。调用“/ search / game”端点。

    2.1。系统处理用户请求并将播放器添加到临时队列,即RedisDB(下一个或同一个实例现在不确定),并将HTTP 200返回给客户端。

  3. 一个特定节点上的调度程序每10-20秒运行一次。看看RedisDB是否有任何记录,如果是真的,那么服务器会保持并置玩家并为他们创建游戏室,直到RedisDB为空或者有奇怪的玩家。

  4. 我不确定如何在websocket中并置特定的播放器并使其对其他节点可见。我已经google了一段时间,并在

    上找到了一个熟悉的例子

    stack:Spring Websocket in a tomcat cluster

    用户Thanh Nguyen Van提到了两种处理多个tomcat实例上的websockets流量的方法,因此我决定使用Apache ActiveMq JMS和Apache Camel作为处理websockets流量解决方案。

    我已经在沙盒应用程序上成功实现了它,其中3个不同的用户可以登录系统并相互发送私人消息。整体使用ActiveMqCamelSTOMPSockJSSpring Boot实施。 足够公平......但这是我坚持的部分。我觉得我已经拥有了我需要的所有积木,但我不能把它们放在一起。

    首先,我不确定给定的过程是否适合所提出的问题。我正在考虑points 2 and 3而不是调用REST endpoint并将玩家添加到RedisDB作为队列缓冲区,也许我应该在玩家之间创建一个websocket(但玩家如何知道游戏websocket端点?另一个临时缓冲队列?)以及如何检测来自客户端的任何传入事件,例如GameRoom套接字中的互联网断开/游戏松动?或者我可能从错误的方面面临问题,除了Spring生态系统中的ActiveMQApache Camel之外,还有更好的工具来处理多个tomcat实例上的websocket流量?

0 个答案:

没有答案