Javascript Node.js WebSocket广播

Javascript Node.js WebSocket广播,javascript,node.js,websocket,Javascript,Node.js,Websocket,我在Node.js和 我正在从库示例中尝试此示例: var sys = require("sys"), ws = require("./ws"); ws.createServer(function (websocket) { websocket.addListener("connect", function (resource) { // emitted after handshake sys.debug("connect: " + resourc

我在Node.js和 我正在从库示例中尝试此示例:

var sys = require("sys"),
    ws = require("./ws");

  ws.createServer(function (websocket) {
    websocket.addListener("connect", function (resource) { 
      // emitted after handshake
      sys.debug("connect: " + resource);

      // server closes connection after 10s, will also get "close" event
      setTimeout(websocket.end, 10 * 1000); 
    }).addListener("data", function (data) { 
      // handle incoming data
      sys.debug(data);

      // send data to client
      websocket.write("Thanks!");
    }).addListener("close", function () { 
      // emitted when server or client closes connection
      sys.debug("close");
    });
  }).listen(8080);
好的。它可以工作,但是运行3个客户端,例如,从一个客户端发送“Hello!”将使服务器只向发送消息的客户端回复“谢谢”,而不是向所有客户端回复

当有人发送“你好!”时,我如何向所有连接的客户端广播“谢谢”


谢谢

我建议您使用。它具有现成的示例web聊天功能,还提供了客户端套接字技术的抽象层(Safari、Chrome、Opera和Firefox支持WebSockets,但由于ws-protocol中存在安全漏洞,现在在Firefox和Opera中禁用了WebSockets)。

如果要发送到所有客户端,你必须跟踪他们。以下是一个示例:

var sys = require("sys"),
    ws = require("./ws");

// # Keep track of all our clients
var clients = [];

  ws.createServer(function (websocket) {
    websocket.addListener("connect", function (resource) { 
      // emitted after handshake
      sys.debug("connect: " + resource);

      // # Add to our list of clients
      clients.push(websocket);

      // server closes connection after 10s, will also get "close" event
      // setTimeout(websocket.end, 10 * 1000); 
    }).addListener("data", function (data) { 
      // handle incoming data
      sys.debug(data);

      // send data to client
      // # Write out to all our clients
      for(var i = 0; i < clients.length; i++) {
    clients[i].write("Thanks!");
      }
    }).addListener("close", function () { 
      // emitted when server or client closes connection
      sys.debug("close");
      for(var i = 0; i < clients.length; i++) {
        // # Remove from our connections list so we don't send
        // # to a dead socket
    if(clients[i] == websocket) {
      clients.splice(i);
      break;
    }
      }
    });
  }).listen(8080);
var sys=require(“sys”),
ws=需要(“./ws”);
//#跟踪我们的所有客户
var客户=[];
ws.createServer(函数(websocket){
addListener(“连接”,函数(资源){
//握手后发出
系统调试(“连接:+资源”);
//#添加到我们的客户名单中
客户端推送(websocket);
//服务器在10秒后关闭连接,也将获得“关闭”事件
//设置超时(websocket.end,10*1000);
}).addListener(“数据”),函数(数据){
//处理传入数据
系统调试(数据);
//向客户端发送数据
//#写信给我们所有的客户
对于(变量i=0;i
我能够让它向所有客户广播,但并不是所有情况下都经过严格测试。不过,总体概念应该会让您开始学习


编辑:顺便说一句,我不确定10秒的收盘是为了什么,所以我把它注释掉了。如果您试图向所有客户端广播,这是毫无用处的,因为它们会一直断开连接。

谢谢您的推荐,回答,但我认为在经过1年(+/-)所有浏览器支持的WebSocket之后。:-)Chrome支持Websockets,Firefox r(尽管在FF中默认禁用)@Matt编辑了答案的文本。@vhye:只是为了澄清@bjord的答案。IO是一个抽象通信的客户机和服务器库。如果WebSockets可用,那么Socket.IO将使用它。如果闪存可用,则Socket.IO可以使用基于闪存的WebSocket后备/填充/多填充。如果两者都不可用,则Socket.IO使用较慢的长轮询方法。换句话说,Socket.IO抽象了底层的transports.onteria,非常感谢!工作我要开始了!:-)谢谢(以及所有其他人对答案的感谢),祝你好运!