Google app engine 在Google计算引擎上扩展WebSocket

Google app engine 在Google计算引擎上扩展WebSocket,google-app-engine,websocket,google-compute-engine,Google App Engine,Websocket,Google Compute Engine,我想实现一个聊天系统,作为我在AppEngine上开发的游戏的一部分。为了实现这一点,我想使用WebSocket,让客户机通过集线器彼此连接,在本例中是GCE的实例。假设这个游戏需要在GCE上扩展到多个实例,那么它是如何工作的呢?如果我有一个客户机1,负载平衡器将客户机1的请求定向到实例a,而另一个客户机(2)进入并定向到实例B,但这些客户机想要彼此聊天,它们将分别连接到不同的集线器,并且无法相互联系。如何将其设置为与scale一起工作?我是否会使用队列来实现它,其中每个实例都在该队列上侦听,如

我想实现一个聊天系统,作为我在AppEngine上开发的游戏的一部分。为了实现这一点,我想使用WebSocket,让客户机通过集线器彼此连接,在本例中是GCE的实例。假设这个游戏需要在GCE上扩展到多个实例,那么它是如何工作的呢?如果我有一个客户机1,负载平衡器将客户机1的请求定向到实例a,而另一个客户机(2)进入并定向到实例B,但这些客户机想要彼此聊天,它们将分别连接到不同的集线器,并且无法相互联系。如何将其设置为与scale一起工作?我是否会使用队列来实现它,其中每个实例都在该队列上侦听,如果是,我将如何做到这一点?

提供了您想要的功能,但适用于Android和ios客户端。因此,此选项可能与您的游戏技术设计不兼容

一般来说,你的推理是正确的。来自希望彼此对话的客户机的消息大部分时间会命中不同的服务器实例。您要做的是让实例处理用户之间的通信。在这种情况下,是非常合适的模式。大致:

  • 每当有一条消息指向客户端X时,就会在通道X上发布一条消息
  • 每当客户端X创建会话时,处理会话的实例都会订阅通道X
您可以首先使用许多现有解决方案中的一种。这是非常容易设置使用。如果你需要一些更低级、更灵活的东西,请退房

您可以期望任一解决方案的单个实例能够处理数千个QP

不幸的是,我没有任何扩展这两个解决方案的经验,因此无法就其可扩展性的限制向您提供任何实用的建议


另外,您可能还想探讨其他主题,例如:消息持久性和故障恢复,我在这里根本没有提到

我还没有尝试实现这一点,但我可能很快就要实现了,我认为自己处理它应该相当简单

您有:服务器1和客户端列表,服务器2和另一个客户端列表, 因此,如果客户端希望将数据发送到服务器2上的另一个客户端,则必须:

  • 查找接收器是否在当前服务器上-如果在,则只发送它(标准)
  • 否则,您会将相同的数据发送到所有其他服务器,以便它们检查特定客户端(或多个客户端)的列表并向它们发送数据