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); 

如果你想从特定的客户端发送消息到其余的客户端,然后使用:

 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

这是因为broadcast是一个io.sockets.socket对象的方法(这将是您的情况下的client ),而不是一个io.sockets对象(如您误导性的socket )。 你想client.broadcast...

它看起来像你使用的是一个非常旧的节点版本(例如sys.pump() ),你也可能使用旧版本的socket.io。