Socket.IO 广播

  • 广播

    广播意味着向所有连接的客户端发送消息。广播可以在多个级别进行。我们可以将消息发送给所有连接的客户端,命名空间上的客户端以及特定房间中的客户端。要向所有客户端广播事件,我们可以使用io.sockets.emit方法。
    注意 -这会将事件发送给所有连接的客户端(事件可能触发此事件的socket)。
    在此示例中,我们将向所有用户广播已连接客户端的数量。更新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');
    });
    
    在客户端,我们只需要处理 broadcast 事件-
    
    <!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.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>
    
    现在,最新的客户端将收到欢迎消息,其他客户端将获得当前连接到服务器的客户端数量。