我编写了用于向 所有 用户广播消息的代码:
// 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。它所看到的只是连接。
因此,我相信现在,我不应该仅通过用户连接来存储用户,而是需要存储一个对象,其中将包含userId和connection对象。
userId
connection
理念:
页面加载完成(DOM准备就绪)后-建立与Node.js服务器的连接。
当Node.js服务器接受连接时-生成一个唯一的字符串,并将其发送到客户端浏览器。将用户连接和唯一字符串存储在一个对象中。例如{UserID:"6", value: {connectionObject}}
{UserID:"6", value: {connectionObject}}
在客户端,当此消息到达时-将其存储在隐藏字段或cookie中。(用于将来对NodeJs服务器的请求)
当服务器要向John发送消息时:
在字典中找到john的UserID并通过相应的连接发送消息。
请注意,此处(在消息机制中)没有inplocate的asp.net服务器代码。仅NodeJ。*
题:
这是正确的方法吗?
这不仅是正确的方法,而且是唯一的方法。基本上每个连接都需要一个唯一的ID。否则,您将无法识别它们,就这么简单。
现在,您将如何表示它是另一回事。使用id和connection属性创建对象是实现此目的的一种好方法(我肯定会这么做)。您也可以将id直接附加到连接对象。
id
还要记住,如果要在用户之间进行通信,则还必须发送目标用户的ID,即,当用户A要向用户B发送消息时,显然,A必须知道B的ID。