socket io的emit函数如何工作?

时间:2017-05-05 15:57:54

标签: javascript node.js express websocket socket.io

在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>

1 个答案:

答案 0 :(得分:3)

  

emit函数会为所有客户端发出事件,还是只为在服务器上连接的客户端发出事件?

在服务器上的代码示例中:

socket.emit(...)只会向该特定连接发送消息。

io.emit(...)会向所有当前连接的客户端发送消息。

请注意,io.emit()没有任何神奇的力量,它只是遍历所有当前连接的客户端,并使用其特定的socket.emit()对象分别为每个客户端调用socket - 为您节省了必须自己编写代码的工作。

从客户端,socket.emit()将向服务器发送消息。