Node.js表示websocket不向所有连接的客户端广播

时间:2017-01-11 16:35:07

标签: node.js express websocket broadcasting

我正在尝试使用 openshift 创建用于消息传递和广播的节点websocket。以下是我的代码。

var WebSocketServer = require('ws').Server;
var http = require('http');
var ipaddr  = opneshift_ip;
var port    = openshift_port;
var server = http.createServer();
var wss = new WebSocketServer({server: server, path: '/connectserv'});

wss.broadcast = function(data) {
    for(var i in this.clients) {
        console.log(this.clients[i]);
        this.clients[i].send(data);
    }
};

wss.on('connection', function(ws) {
    console.log('a client connected'); 
    ws.on('message', function(data) {
        console.log('>>> ' + data); 
        ws.send('got '+data);
        if (data == 'broadcst') { 
            console.log('broadcst'); 
            wss.broadcast('Hi All'); 
        }
    });
    ws.on('close', function() {
      console.log('Connection closed!');
    });
    ws.on('error', function(e) {
      console.log(e);
    });
});

console.log('Listening at IP ' + ipaddr +' on port '+port);
server.listen(port,ipaddr);    

当任何客户端连接时,控制台写入"客户端连接"。 当任何客户端发送消息时,控制台会写入">>>消息"并且我也在客户端获得相同的信息("得到消息")

但是当连接多个客户端时,如果我想向所有连接的客户端广播消息,我发送" broadcst"作为消息。比进入

    if (data == 'broadcst') { 
        console.log('broadcst'); 
        wss.broadcast('Hi All'); 
    }

但只有发送的客户端才能收到消息。

如何让所有客户收到消息? 每个客户创建单独的会话吗? 如何在这里使用redis?

任何快速帮助表示赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

尝试

wss.broadcast = function(data) {
  for(var i in wss.clients) {
    console.log(wss.clients[i]);
    wss.clients[i].send(data);
  }
};

broadcasting with wss