Websocket群组聊天的最佳实践/所有群组的一个websocket或每个群组一个websocket?

时间:2015-09-28 06:07:26

标签: performance websocket atmosphere

我必须使用websocket实现聊天应用程序,用户将通过组聊天,可以有数千个组,用户可以在多个组中。我正在考虑两个解决方案:

[1]对于每个群组聊天,我创建一个websocket端点(使用camel-atmosphere-websocket),同一组中的用户可以订阅群组端点并通过该端点发送/接收消息。这意味着可以有数千个websocket端点。客户端(假设iPhone)必须订阅多个wbesocket端点。这是一个好习惯吗?

[2]我只为所有组创建一个websocket端点。客户端只是订阅这个端点,我自己在服务器上管理消息分发:获取组成员,从连接的websockets列表中选择每个成员的websocket,然后通过websocket将消息写入每个成员。

哪种解决方案在性能方面更好,并且易于在客户端和服务器上实现?

感谢。

编辑2015-10-06

我选择了第二种方法并使用jetty websocket客户端进行了测试,我在服务器端使用了camel氛围websocket。在客户端,我在线程中创建到服务器的websocket连接。 jetty有一个问题,我可以创建大约160个websocket连接(这意味着大约160个线程)。结果是,当客户端数量从1增加到160时,我几乎没有看到差异。

是的,160不是一个很大的数字,但我认为当我真正看到性能问题时我会做更多的测试,现在,我对第二种方法没问题。

如果您对测试代码感兴趣,请点击此处: http://www.eclipse.org/jetty/documentation/current/jetty-websocket-client-api.html#d0e22545

2 个答案:

答案 0 :(得分:4)

我认为第二种方法更适合用于提高性能。我正在使用相同的应用程序,但它仍处于测试阶段,因此无法对实时性能发表评论。现在它运行10-15组并且工作正常。在我的应用程序中,存在类似于您的用户可以基于组进行聊天的情况。我正在使用node.js在服务器端处理组创建。以下是创建组的代码,但它适用于我的应用程序特定条件。只是粘贴在这里作为参考。从前端获取homeStateuserId。根据{{​​1}}创建组。这段代码只是例如,它不会为你工作。要提高效果,您可以使用homeState

clustering

答案 1 :(得分:0)

浏览器对可通过同一选项卡打开的Websocket数量实施限制。您不能依靠能够建立尽可能多的连接。寻求解决方案2