【发布时间】:2018-03-16 00:45:26
【问题描述】:
我正在尝试在使用 HTML5 websocket 和 node.js 创建的简单聊天中在用户之间发送私人消息。
当用户连接时,我为他们创建一个简单的 ID(连接 ID)并将其添加到此 CLIENTS=[];
当我执行console.log(CLIENTS); 时,我看到的所有 ID 都是这样的:
[0, 1, 2]
现在我需要使用 ID 向用户发送私人消息。
所以我继续这样做(出于测试目的,我只需要将消息发送给 ID 为 2 的用户):
var express = require('express'),
app = express(),
http = require('http').Server(app),
WebSocketServer = require('ws').Server,
wss = new WebSocketServer({
port: 8080
});
CLIENTS = [];
connectionIDCounter = 0;
app.use(express.static('public'));
app.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
wss.broadcast = function broadcast(data) {
wss.clients.forEach(function each(client) {
client.send(data);
});
};
wss.on('connection', function(ws) {
/////////SEE THE IDs HERE////////////////
ws.id = connectionIDCounter++;
CLIENTS.push(ws.id);
console.log(CLIENTS);
ws.on('message', function(msg) {
data = JSON.parse(msg);
/////SEND A PRIVATE MESSAGE TO USER WITH THE ID 2//////
CLIENTS['2'].send(data.message);
});
});
http.listen(3000, function() {
console.log('listening on *:3000');
});
当我运行我的代码时,我收到以下错误:
TypeError: CLIENTS.2.send is not a function
有人可以就这个问题提出建议吗?
任何帮助将不胜感激。
提前致谢。
【问题讨论】:
-
CLIENTS = []=>CLIENTS = {},CLIENTS.push(ws.id);=>CLIENTS[ws.id] = ws。基本上,您保存的是客户端 ID,而不是客户端连接。 -
这是什么意思:CLIENTS = [] => CLIENTS = {}, CLIENTS.push(ws.id); => 客户[ws.id] = ws ?
-
用对象替换数组。保存整个 ws 连接,而不仅仅是 id。
-
好吧..我会试试的。