如何在 WebSocket 聊天应用程序中跟踪用户(连接)

Posted

技术标签:

【中文标题】如何在 WebSocket 聊天应用程序中跟踪用户(连接)【英文标题】:How to keep track of users (connections) in a WebSocket Chat application 【发布时间】:2011-11-03 04:23:42 【问题描述】:

我正在使用 em-websocket (Ruby EventMachine) gem 来提供 WebSocket 聊天应用程序。我能够很容易地获得一个演示应用程序 (based on this gist)。现在我想更高级一点。目前,唯一的功能是向聊天室发布消息,但不显示谁发送了消息(因为我不知道如何跟踪此信息)。

我假设这样做的方法是使用某种 ID 来回发送 JSON,但这个 ID 是从哪里来的?是否有某种可重复使用的 ID 对识别用户的每个连接都是唯一的?

对不起,如果这是一个愚蠢的问题,我是使用 WebSockets 的新手。

【问题讨论】:

【参考方案1】:

我使用 em-websocket 编写了一个基本的聊天应用程序。您可以在此处查看代码:

https://github.com/DavidEGrayson/websocket-chat/blob/master/rws1/server.rb

em-websocket gem 创建一个Web 套接字对象来表示每个连接。我创建了自己的 Client 类,其中包含用户名和对 websocket 对象的引用。

请随时问我有关该代码的问题。

【讨论】:

我没有使用 json,我认为你也不需要,至少现在是这样。 这太棒了。我有一个问题。如果你有客户端的名字和相应的 websocket 对象,你如何通过那个特定的 websocket 发送消息? 只需执行websocket.send message,其中websocket 是一个Web 套接字对象,message 是一个字符串。 send 方法由 em-websocket 提供。 好的,我还注意到您在 addClient 方法中调用了 websocket.request["Query"]["name"]。这会得到什么,在哪里可以找到可以在 websocket 对象上调用的方法?您也可以在handle_message 中调用send(command, websocket, data),这似乎与websocket.send 不同 实际上它需要是“查询”而不是“查询”才能使用最新版本的 em-websocket。这会得到客户端的名字请求,它包含在websocket的url的查询字符串中,“GET /chatroom?name=David”是客户端请求的第一行。 em-websocket 的文档在这里:github.com/igrigorik/em-websocket 我不知道他们是否有所有命令的良好 API 列表,有时我在源代码中四处寻找或使用 websocket.methods.inspect

以上是关于如何在 WebSocket 聊天应用程序中跟踪用户(连接)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 和 websocket 创建实时聊天

使用 php 在 android 中使用 websocket 实现聊天

如何在 Tornado 中创建多个 websocket 聊天?

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

在反应中切换聊天时如何订阅新的websocket会话

java - 如何使用simplebroker或rabbitMQ和java spring在websocket中获取所有连接的用户