2017-10-04 68 views
0

我試圖在使用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 

有人可以請關於這個問題的建議?

任何幫助,將不勝感激。

在此先感謝。手動

+0

'CLIENTS = []'=>'CLIENTS = {}','CLIENTS.push(ws.id);'=>'CLIENTS [ws.id] = ws'。基本上,您保存了客戶端ID,而不是客戶端連接。 –

+0

這是什麼意思:CLIENTS = [] => CLIENTS = {},CLIENTS.push(ws.id); =>客戶端[ws.id] = ws? –

+0

用對象替換數組。保存整個ws連接,而不是id。 –

回答

1
  1. 軌跡客戶端,取代: CLIENTS = []CLIENTS = {}CLIENTS.push(ws.id);CLIENTS[ws.id] = ws;

  2. 根據碼頭https://github.com/websockets/ws/blob/master/doc/ws.md應該是這樣的:

new WebSocket.Server(options[, callback])
clientTracking {Boolean} Specifies whether or not to track clients.

server.clients - A set that stores all connected clients. Please note that this property is only added when the clientTracking is truthy.

var WebSocketServer = require('ws').Server, 
     wss = new WebSocketServer({ 
       port: 8080, 
       clientTracking: true 
     }); 

    ..... 

    wss.on('connection', function(ws) { 
     ws.on('message', function(msg) { 
      data = JSON.parse(msg); 
      wss.clients[ID].send(data.message); 
     }); 
    }); 

我不知道什麼數據格式wss.clients是,所以你應該自己嘗試。如果這真的是碼頭說的{Set},那麼試試wss.clients.get(ID).send(data.message)

+0

不是'wss.clients [ID] .send(data.message);'應該是'wss.CLIENTS [ID] .send(data.message);'? –

+0

nope,嘗試從示例代碼 –

相關問題