在socket.io的官方网站上我有一个代码示例,我的疑问是,emit函数会为所有客户端或仅为在服务器中连接的客户端发出事件?示例代码:
服务器(app.js):
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
客户端(index.html):
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
答案 0 :(得分:3)
emit函数会为所有客户端发出事件,还是只为在服务器上连接的客户端发出事件?
在服务器上的代码示例中:
socket.emit(...)
只会向该特定连接发送消息。
io.emit(...)
会向所有当前连接的客户端发送消息。
请注意,io.emit()
没有任何神奇的力量,它只是遍历所有当前连接的客户端,并使用其特定的socket.emit()
对象分别为每个客户端调用socket
- 为您节省了必须自己编写代码的工作。
从客户端,socket.emit()
将向服务器发送消息。