如何在 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 聊天应用程序中跟踪用户(连接)的主要内容,如果未能解决你的问题,请参考以下文章
使用 php 在 android 中使用 websocket 实现聊天
如何在 Tornado 中创建多个 websocket 聊天?
群组聊天的 Websocket 最佳实践/所有群组一个 websocket 还是每组一个 websocket?
java - 如何使用simplebroker或rabbitMQ和java spring在websocket中获取所有连接的用户