gpt4 book ai didi

performance - 群组聊天的 Websocket 最佳实践/所有群组使用一个 Websocket 还是每个群组使用一个 Websocket?

转载 作者:行者123 更新时间:2023-12-03 02:26:11 28 4
gpt4 key购买 nike

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

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

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

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

谢谢。

<小时/>

编辑2015-10-06

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

是的,160不是一个大数字,但我想当我真正看到性能问题时我会做更多测试,目前,我可以接受第二种方法。

如果您对测试代码感兴趣,这里是: http://www.eclipse.org/jetty/documentation/current/jetty-websocket-client-api.html#d0e22545

最佳答案

我认为第二种方法对于性能来说会更好。我在我的应用程序中使用相同的方法,但它仍处于测试阶段,因此无法评论实时性能。现在可以运行 10-15 组并且工作正常。在我的应用程序中,存在与您类似的情况,用户可以基于组聊天。我正在使用 node.js 在服务器端处理组创建。这是创建组的代码,但它适用于我的应用程序的特定条件。只是粘贴在这里供引用。从前端获取 homeStateuserId。基于homeState创建组。此代码仅用于示例,它对您不起作用。要提高性能,您可以使用集群

this.ConnectionObject = function(homeState, userId, ws) {
this.homeState = homeState;
this.userId = userId;
this.wsConnection = ws;
},

this.createConnectionEntry = function(homeState, userId,
ws) {

var connObject = new ws.thisRefer.ConnectionObject(homeState, userId,
ws);
var connectionEntryList = null;
if (ws.thisRefer.connectionMap[homeState] != undefined) {
connectionEntryList = ws.thisRefer.connectionMap[homeState];
} else {
connectionEntryList = new Array();
}
connectionEntryList.push(connObject);

console.log(connectionEntryList.length);

ws.thisRefer.connectionMap[homeState] = connectionEntryList;
ws.thisRefer.connecteduserIdMap[userId] = "";

}

关于performance - 群组聊天的 Websocket 最佳实践/所有群组使用一个 Websocket 还是每个群组使用一个 Websocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32816618/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com