一尘不染

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

node.js

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

// 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。*

题:

这是正确的方法吗?


阅读 730

收藏
2020-07-07

共1个答案

一尘不染

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

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

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

2020-07-07