棘轮多个服务器

问题描述 投票:4回答:1

我在我的PHP应用程序中使用Ratchet(http://socketo.me/)作为websockets。我有多个运行应用程序的虚拟机,每台机器也托管websocket服务。请求通过HAProxy传递给其中一个虚拟机。目前,用户还在为应用程序连接的同一节点上使用websocket服务。

现在我遇到了websocket服务器相互讨论的问题。例如:

  • user1连接到node1,user2连接到node2
  • User1通过websocket将websocket消息发送给user2
  • User2永远不会收到此消息,因为他已连接到另一个节点

做这种消息传递的好方法是什么?我有一些想法,但不知道该怎么办:

  1. 每个客户端连接到每个websocket节点。
  2. 服务器也将消息发布到所有其他节点
  3. 使用数据库同步节点之间的消息

如果新节点连接到云,则第一个和第二个选项的可扩展性不高。第3个选项会导致一些延迟,因为有必要检查来自其他节点的消息是否在循环数据库中。

有没有其他选择来处理这样的情况?谢谢你的回答!

php haproxy ratchet
1个回答
0
投票

只需几个注释就可能指出人们可能的方向:

  • 您可以将Redis用作实现列表的非常快速的数据库 - rpush,llen,lrange。这将以惊人有效的方式处理服务器之间的同步。
  • 不要直接在onMessage处理程序中发送消息,而是将消息直接放入Redis。这样处理程序非常快。
  • 而不是让Ratchet创建自己的循环,手动创建一个并在其上添加一个定期计时器,轮询Redis并向客户端发送新消息。
© www.soinside.com 2019 - 2024. All rights reserved.