1

使用 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);
4

2 回答 2

2

如果您想从特定客户端向其他客户端发送消息,请使用:

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

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

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

sys, pump, 它们都已被弃用。

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

于 2012-09-20T03:02:47.183 回答
1

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

从您的代码来看,您使用的是非常旧的 node 版本(例如sys.pump()),并且您可能还使用了旧版本的 socket.io。

于 2012-09-20T02:26:42.037 回答