egg-socket.io 向指定客户端发送消息

egg-socket.io 功能

egg-socket.io是对socket.io的一个封装,加上了对router、controller、namespace和middleware的规约。

其中,router与controller主要用于分发和处理socket.io客户端的请求,但我们之所以引入socket.io,往往是为了获得服务端主动推送的能力,这两部分就略过了。

剩下的namespacemiddleware与实现向指定客户端推送功能有关,在egg-socket.io里它们都是通过配置文件进行配置的

// config.default.js
config.io = {
   
  namespace: {
   
    '/': {
   
      connectionMiddleware: [ 'auth' ], //连接处理
      packetMiddleware: [], //包处理
    },
  },
  generateId: req => {
    //自定义 socket.id 生成函数
    const data = qs.parse(req.url.split('?')[1]);
    return data.userId; // custom id must be unique
  },
};

简单介绍一下作用:

namespace (命名空间)

就是socket.io的命名空间,作用相当于给客户端socket连接划分集合,同一组连接放在一个 namespace 下。

通过namespace服务器可以向命名空间下的全体客户端广播或向指定socketId的客户端单独发送消息。

const namespace = app.io.of('/'); //获取命名空间 "/"
//namespace.sockets :连接到该命名空间的所有客户端,形式为 {id1:socket1, id2:socket2}
//通过 socket.id 就可以向该namespace下的指定客户端发送消息
namespace.sockets[socketId].emit('message', msg); 

middleware (中间件)

connectionMiddleware: 连接处理中间件

对每一次 socket 连接的建立/断开进行处理

// {app_root}/app/io/middleware/connection.js
module.exports = app => {
   
  return async (ctx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值