簡體   English   中英

使用客戶端ID和websocket和node.js將數據發送到某些客戶端

[英]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發送給所有人。

免責聲明: Ably的共同創始人-更好的實時性

我懷疑那里有兩個問題。 首先,如果您需要擴展到多個服務器,則會遇到問題,因為您將需要弄清楚如何在服務器之間傳遞消息。 其次,您無法維護斷開連接之間的狀態,而斷開連接是客戶端正常行為的一部分

行業通常會在規模擴大時使用渠道概念來解決此類問題,它將發布者與訂閱者分離開來,這是一個非常簡單的概念。 例如,如果您有一個名為“ client:1”的頻道並發布到該頻道,而您的訂閱者正在該頻道上收聽,那么他們將收到該消息。 您可以找到有關我們如何設計各種渠道的實時服務的更多信息,建議您在系統中考慮該模式。

Matt, Ably聯合創始人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM