socket io 的 emit 函数是如何工作的?

Posted

技术标签:

【中文标题】socket io 的 emit 函数是如何工作的?【英文标题】:How the emit function of socket io works? 【发布时间】:2017-05-05 15:57:53 【问题描述】:

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

【问题讨论】:

每个连接都完成。每个到服务器的连接本质上都会创建一个传递给回调的套接字对象。 您可以参考这个答案以获得所有不同的回复,Check out 【参考方案1】:

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

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

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

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

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

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

【讨论】:

以上是关于socket io 的 emit 函数是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io 未能发出函数

Socket.io Emit 不起作用

Android socket.IO中的Emit或Ack超时处理?

io.emit 与 socket.emit

socket.io简单总结

socket.io - socket.emit、socket.on、socket.send