当前位置: 首页 > 面试题库 >

使用webSocket向特定的已连接用户发送消息?

寇鸿
2023-03-14
问题内容

我编写了用于向 所有 用户广播消息的代码:

// websocket and http servers
var webSocketServer = require('websocket').server;

...
...
var clients = [ ];

var server = http.createServer(function(request, response) {
    // Not important for us. We're writing WebSocket server, not HTTP server
});
server.listen(webSocketsServerPort, function() {
  ...
});

var wsServer = new webSocketServer({
    // WebSocket server is tied to a HTTP server. 
    httpServer: server
});

// This callback function is called every time someone
// tries to connect to the WebSocket server
wsServer.on('request', function(request) {
...
var connection = request.accept(null, request.origin); 
var index = clients.push(connection) - 1;
...

请注意:

  • 我没有任何用户参考,只有一个连接。
  • 所有用户连接均存储在中array

目标
:假设Node.js服务器希望将消息发送到特定客户端(约翰)。NodeJs服务器如何知道John拥有哪个连接?Node.js服务器甚至都不认识John。它所看到的只是连接。

因此,我相信现在,我不应该仅通过用户连接来存储用户,而是需要存储一个对象,其中将包含userIdconnection对象。

理念:

  • 页面加载完成(DOM准备就绪)后-建立与Node.js服务器的连接。

  • 当Node.js服务器接受连接时-生成一个唯一的字符串,并将其发送到客户端浏览器。将用户连接和唯一字符串存储在一个对象中。例如{UserID:"6", value: {connectionObject}}

  • 在客户端,当此消息到达时-将其存储在隐藏字段或cookie中。(用于将来对NodeJs服务器的请求)

当服务器要向John发送消息时:

  • 在字典中找到john的UserID并通过相应的连接发送消息。

  • 请注意,此处(在消息机制中)没有inplocate的asp.net服务器代码。仅NodeJ。*

题:

这是正确的方法吗?


问题答案:

这不仅是正确的方法,而且是唯一的方法。基本上每个连接都需要一个唯一的ID。否则,您将无法识别它们,就这么简单。

现在,您将如何表示它是另一回事。使用idconnection属性创建对象是实现此目的的一种好方法(我肯定会这么做)。您也可以将id直接附加到连接对象。

还要记住,如果要在用户之间进行通信,则还必须发送目标用户的ID,即,当用户A要向用户B发送消息时,显然,A必须知道B的ID。



 类似资料:
  • 我是新手。NET(C#)和WebSocket。。。我已经安装了VS2012和Windows Server 2012,并且已经启动并运行了WebSocket。我似乎无法从一个套接字接收消息并将其发送到另一个特定的套接字。唯一的选择似乎是向所有套接字广播消息。有没有一种方法可以将消息只发送给特定的用户?我希望聊天室主持人有机会拒绝不适当的帖子。

  • 我使用本教程中描述的spring设置了一个WebSocket:https://spring.io/guides/gs/messaging-stomp-websocket/。我需要的是我的服务器每5秒向特定用户发出一条消息。所以我首先做了这个: 而且起作用了。现在,为了只向特定用户发送消息,我更改了以下内容: 在WebSocketConfig.java中添加队列: 更改GreetingControl

  • 问题内容: 如何仅从服务器向特定用户发送websocket消息? 我的webapp具有spring安全设置,并使用websocket。我在尝试仅从服务器向特定用户发送消息时遇到棘手的问题。 通过阅读手册,我的理解是来自我们可以做的服务器 在客户端: 但是我永远无法调用订阅回调。我尝试了许多不同的方法,但是没有运气。 如果我将其发送到/ topic / reply,它可以工作,但所有其他已连接用户也

  • 我正在阅读《Spring in Action4》一书,以使用WebSocket上的STOMP消息传递。 假设,如下所示: 然后客户端使用以下JavaScript代码订阅目标: 则该消息将发送到目的地,如下所示: 那么,两个目的地和看起来是不同的,消息怎么可能到达客户端呢?

  • 如何仅将websocket消息从服务器发送给特定用户? 我的webapp具有Spring Security设置,并使用websocket。我在尝试只从服务器向特定用户发送消息时遇到了一个棘手的问题。 从阅读手册中我的理解是从服务器上我们可以做到的 在客户端: 但是我永远无法调用订阅回调。我尝试了许多不同的道路,但没有运气。 如果我将它发送到/topic/reply,它会工作,但所有其他连接的用户也

  • 问题内容: 我想在用户连接到Spring WebSocket时向其发送消息, MyChannelInterception类为 通过这一点,我在收到新连接的用户,但该方法的信息中不将消息发送到新的登录用户。 问题答案: 我将创建侦听器并在内部使用。 顺便说一句,仅被调用一次(不适用于每个连接的用户)。因此,您必须处理拦截器中的发送消息。 尝试这样的事情: 我希望这个能帮上忙