我試圖在使用HTML5 websocket和node.js創建的簡單聊天中,在用戶之間發送私人消息。如何在HTML5 websocket和node.js聊天中使用客戶端ID?
當用戶連接,我爲他們創造(連接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。 –