socket.io 服务端推送消息的几种方式

const express = require('express');
const http = require('http');
const socketio = require('socket.io');

const server = http.createServer(express());
const io = socketio(server);

// 使用默认nsp '/' ,io.on等效于io.of('/');
io.of('/').on('connection', (socket) => {
  socket.on('disconnect', function () {
    console.log('websocket disconnected');
  });
  // 对客户发送过来的'message'事件进行处理
  socket.on('message', function (msg) {
    console.warn('socket.rooms', socket.rooms);

    // namespace(nsp) > room > socketid (socketid装入room,room装入nsp)

    // 1、向指定的房间('abc')广播消息(包括当前连接的socket客户端)
    // io.of('/').to('abc').emit('message', '房间内所有人适用,包括自己');
    io.to('abc').emit('message', String(new Date().toLocaleTimeString()) + '房间内所有人适用,包括自己'); //在不知道nsp时默认为'/',与下面的等效
    // io.of('/').to('abc').emit('message', String(new Date().toLocaleTimeString()) + '房间内所有人适用,包括自己');

    // 2、全局广播消息(不包括当前连接的socket客户端)
    // 只有和当前socket同属于一个nsp(默认为'/')的socket客户端才可以收到消息
    socket.broadcast.emit('message', String(new Date().toLocaleTimeString()) + '全局广播消息(不包括当前连接的socket客户端)');

    //3、 向指定的房间广播信息(不包括当前连接的socket客户端)
    // 只有和当前socket同属于一个nsp(默认为'/')下'abc'房间内的socket客户端才可以收到消息
    socket.broadcast.to('abc').emit('message', String(new Date().toLocaleTimeString()) + '向指定的房间广播信息(不包括当前连接的socket客户端)');

    // 4、向当前连接的socket客户端发送消息(服务端->客户端 或者 客户端->服务端)
    socket.emit('message', '服务端->客户端')

    // 5、等效于socket.emit('message', '服务端->客户端')
    socket.send('服务端->客户端');  //Sends a 'message' event

  });
  // 加入房间
  socket.on('join', room => {
    socket.join(room);
    socket.emit('joined')
  });
  // 离开房间
  socket.on('leave', room => {
    socket.leave(room);
  });
});

server.listen(6666);

你可能感兴趣的:(socket.io 服务端推送消息的几种方式)