node.js和socket.io - 广播未定义

时间:2012-09-19 23:13:45

标签: node.js socket.io

使用Node.js和socket.io,以下工作正常,尝试广播回客户端。

我的广播未定义?

var http = require('http'),
    sys  = require('sys'),
    fs   = require('fs'),
    io   = require('socket.io');

var server = http.createServer(function(request, response) {
  response.writeHead(200, {
    'Content-Type': 'text/html'
  });

  var rs = fs.createReadStream(__dirname + '/index.html');
  sys.pump(rs, response);

});

var socket = io.listen(server);
debugger;
socket.on('connection', function(client) {
  debugger;
  var username;

  client.send('Welcome to this socket.io chat server!');
  client.send('Please input your username: ');

  client.on('message', function(message) {
    if (!username) {
      username = message;
      client.emit('Welcome, ' + username + '!');
      return;
    }
    socket.broadcast.send('a message');
    //io.socket.send('a message');
    //io.socket.emit('message', username + ' sent: ' + message);
  });

});

server.listen(4000);

2 个答案:

答案 0 :(得分:2)

如果要将消息从特定客户端发送给其他客户端,请使用:

client.broadcast.send('a message');

要向所有客户发送消息,请使用:

socket.sockets.send('a message');

syspump,它们都已弃用。

https://github.com/joyent/node/wiki/API-changes-between-v0.6-and-v0.8 http://nodejs.org/api/util.html#util_util_pump_readablestream_writablestream_callback

答案 1 :(得分:1)

这是因为broadcastio.sockets.socket对象的方法(在您的情况下为client),而不是io.sockets对象(例如您的误导性对象)名为socket)。你想要client.broadcast...

从您的代码看起来就像您使用的是旧版本的节点(例如sys.pump()),您可能也在使用旧版本的socket.io。