使用带有websocket和node.js的客户端ID将数据发送到某个客户端

时间:2016-06-21 00:02:05

标签: javascript node.js websocket

我正在创建客户服务聊天应用程序,从客户端网站获取数据到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)回复客户端,但是发送给所有没有指定用户ID的客户端。

1 个答案:

答案 0 :(得分:0)

免责声明:Ably - simply better realtime

的联合创始人

我怀疑你有两个问题。首先,如果您需要扩展到多个服务器,那么您就会遇到问题,因为您需要弄清楚如何在服务器之间传递消息。其次,你无法在断开will happen as part of normal behaviour for clients之间保持状态。

业界通常使用渠道概念来解决这类问题,因为它可以扩展,它将发布者与订阅者分离,这是一个非常简单的概念。例如,如果您有一个名为“client:1”的频道并且您发布到该频道,并且您的订阅者正在该频道上进行侦听,那么他们将收到该消息。您可以找到有关我们designed our realtime service around channels的更多信息,我建议您在系统中考虑这种模式。

Matt,联合创始人,Ably