我写了一个向all个用户广播消息的代码:

// 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中.

Goal:假设Node.js服务器想要向特定客户机(John)发送消息.NodeJS服务器如何知道John具有哪个连接?js服务器甚至不认识John.它所看到的都是联系.

所以,我认为现在,我不应该只通过连接来存储用户,相反,我需要存储一个对象,它将包含userIdconnection对象.

Idea:

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

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

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


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

  • 在字典中找到john的用户ID,并通过相应的连接发送消息.

  • 请注意没有asp.net服务器代码在此处(消息机制中)嵌入.只有点头*

Question:

走这条路对吗?

推荐答案

这不仅是正确的道路,也是唯一的道路.基本上每个连接都需要一个唯一的ID,否则无法识别,就这么简单.

现在你将如何表示它,那就是另一回事了.创建一个具有idconnection个属性的对象是一个很好的方法(我肯定会go 做).您也可以将id直接附加到Connection对象.

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

Html相关问答推荐

使用视图调整图像大小

如何通过将项目包裹在迪夫中来保持最右列的对齐方式来对齐项目?

纯CSS语音气泡与半透明背景和边框

我似乎不能正确地将我的导航栏居中'

CSS:显示块,第一个项目没有正确对齐

带有多种 colored颜色 的HTML按钮

如何在伪元素背景中定位多个CSS径向梯度

如何使用CSS在NSAttributedString中为HTML文本中的图像制作覆盖图

使用HTML进行DAX测量

滚动两个不同高度的DIV;一个等待另一个

如何将CSS滤镜仅应用于背景图像

我希望创建一个对角手风琴与不同的内容(文本和图像)在其正常状态和其他元素悬停

div居中碰撞问题

使自定义图像滑块全宽

如何防止滑动滚动元素时touch 屏出现空白区域?

如何使元素具有粘性

当浏览器宽度减小时字体大小变得太大

白色栏超出页面100%的右侧

删除按钮组件时 bootstrap col-auto 布局高度对齐中断

font awesome 的 CDN/CSS 如何工作?