使用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);
答案 0 :(得分: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
答案 1 :(得分:1)
这是因为broadcast
是io.sockets.socket
对象的方法(在您的情况下为client
),而不是io.sockets
对象(例如您的误导性对象)名为socket
)。你想要client.broadcast...
。
从您的代码看起来就像您使用的是旧版本的节点(例如sys.pump()
),您可能也在使用旧版本的socket.io。