棘轮多个服务器

时间:2015-02-12 06:12:10

标签: php haproxy ratchet

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

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

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

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

  1. 每个客户端都连接到每个websocket节点。
  2. 服务器也将消息发布到所有其他节点
  3. 使用数据库同步节点之间的消息
  4. 如果新节点连接到云,则第一个和第二个选项的可扩展性不高。第3个选项会导致一些延迟,因为有必要检查来自其他节点的消息是否在循环数据库中。

    还有其他选择来处理这样的情况吗?谢谢你的答案!

1 个答案:

答案 0 :(得分:0)

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

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