[英]Send data to certain client using client ID with websocket and node.js
我正在創建客戶服務聊天應用程序,該應用程序將從客戶端網站獲取數據到node.js服務器,然后將此數據發送給代理,然后代理將回復發送給客戶端。
服務器代碼:
var ws = require("nodejs-websocket");
var clients = [];
var server = ws.createServer(function(conn){
console.log("New Connection");
//on text function
conn.on("text", function(str){
var object = JSON.parse(str);
conn.sendText("Message send : " + object);
console.log("User ID: " + object.id);
clients.push(object.id);
var unique=clients.filter(function(itm,i,a){
return i==a.indexOf(itm);
});
/*
conn.on('message', function("test") {
console.log('message sent to userOne:', message);
unique[0].send("Message: " + message);
});
*/
console.log("Number of connected users : " + unique.length);
//closing the connection
conn.on("close", function(){
console.log("connection closed");
});
});
}).listen(process.env.PORT, process.env.IP);
一切正常,我有每個客戶端ID,但是我想向該客戶端ID回復一條消息。
我嘗試過的
我嘗試使用conn.send("message", callBackFunction)
答復客戶端conn.send("message", callBackFunction)
但它不使用指定的用戶ID發送給所有人。
我懷疑那里有兩個問題。 首先,如果您需要擴展到多個服務器,則會遇到問題,因為您將需要弄清楚如何在服務器之間傳遞消息。 其次,您無法維護斷開連接之間的狀態,而斷開連接是客戶端正常行為的一部分 。
行業通常會在規模擴大時使用渠道概念來解決此類問題,它將發布者與訂閱者分離開來,這是一個非常簡單的概念。 例如,如果您有一個名為“ client:1”的頻道並發布到該頻道,而您的訂閱者正在該頻道上收聽,那么他們將收到該消息。 您可以找到有關我們如何設計各種渠道的實時服務的更多信息,建議您在系統中考慮該模式。
Matt, Ably聯合創始人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.