Socket.IO - 广播

广播意味着向所有连接的客户端发送消息。广播可以在多个级别完成。我们可以将消息发送到所有连接的客户端,命名空间上的客户端和特定空间中的客户端。要向所有客户端广播事件,我们可以使用 io.sockets.emit 方法。

注意 - 这将向所有连接的客户端发出事件 (事件可能触发了此事件的 Sockets)。

在此示例中,我们将向所有用户广播已连接客户端的数量。更新 app.js 文件以包含以下内容。

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res) {
   res.sendfile('index.html');
});

var clients = 0;
io.on('connection', function(socket) {
   clients++;
   io.sockets.emit('broadcast',{ description: clients + ' clients connected!'});
   socket.on('disconnect', function () {
      clients--;
      io.sockets.emit('broadcast',{ description: clients + ' clients connected!'});
   });
});

http.listen(3000, function() {
   console.log('listening on localhost:3000');
});

在客户端,我们只需要处理广播事件 -

<!DOCTYPE html>
<html>
   <head>
      <title>Hello world</title>
   </head>
   <script src = "/socket.io/socket.io.js"></script>
   <script>
      var socket = io();
      socket.on('broadcast',function(data) {
         document.body.innerHTML = '';
         document.write(data.description);
      });
   </script>
   <body>Hello world</body>
</html>

如果你连接四个客户端,你将获得以下结果 -

Socket.io 向所有人广播

这是向每个人发送一个事件。现在,如果我们想要向每个人发送一个事件,但是导致它的客户端(在前面的例子中,它是由连接时的新客户端引起的),我们可以使用 socket.broadcast.emit

让我们向新用户发送欢迎消息,并向其他客户更新他/她的加入。因此,在你的 app.js 文件中,在客户端连接上向他发送欢迎消息并将连接的客户端数目广播给所有其他人。

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res) {
   res.sendfile('index.html');
});

var clients = 0;
io.on('connection', function(socket) {
   clients++;
   socket.emit('newclientconnect',{ description: 'Hey, welcome!'});
   socket.broadcast.emit('newclientconnect',{ description: clients + ' clients connected!'})
   socket.on('disconnect', function () {
      clients--;
      socket.broadcast.emit('newclientconnect',{ description: clients + ' clients connected!'})
   });
});

http.listen(3000, function() {
   console.log('listening on localhost:3000');
});

你的 html 来处理这个事件 -

<!DOCTYPE html>
<html>
   <head>
      <title>Hello world</title>
   </head>
   <script src = "/socket.io/socket.io.js"></script>
   <script>
      var socket = io();
      socket.on('newclientconnect',function(data) {
         document.body.innerHTML = '';
         document.write(data.description);
      });
   </script>
   <body>Hello world</body>
</html>

现在,最新的客户端收到欢迎消息,其他客户端获取当前连接到服务器的客户端数量。