如何为 Socket IO 通知实现度量中间件,应该跟踪发射和侦听器事件?

Posted

技术标签:

【中文标题】如何为 Socket IO 通知实现度量中间件,应该跟踪发射和侦听器事件?【英文标题】:How to implement metrics middleware for Socket IO notification , should track emits and listner events? 【发布时间】:2017-04-23 05:36:48 【问题描述】:

我在一个用例中跟踪所有由服务器触发的 socket.io 通知事务,类似 API req/res counter 来验证订阅验证..

我们正在使用一个快速中间件,它跟踪用户发出的所有 REST API 请求并相应地征收订阅规则。现在尝试在套接字 io 通知上实现类似的中间件..

技术栈:NodeJS、Loopback、Express、Socket IO。

任何建议请..

【问题讨论】:

您可以通过覆盖io.emit()socket.prototype.emit() 来跟踪.emit()。没有内置的方法来监视所有传入事件。有一些补丁可以让你做到这一点。您还可以覆盖socket.prototype.on() 并捕获正在侦听的所有事件。 感谢您的回复...能否详细说明您的回答,基本上我的意图是定义一个处理程序,所有套接字事件都应通过该处理程序.. socket.io 本身不能这样工作。您可以尝试以下方法之一:github.com/lmjabreu/socket.io-wildcard 或 github.com/hden/socketio-wildcard.or github.com/fullstackers/socket.io-events 看看他们是否添加了您想要的内容。 另外,类似的讨论在这里:Socket.io Client: respond to all events with one handler? 和关于 socket.io Github 存储库的长时间讨论:Add wildcard support for events 并提到了多种解决方案。 【参考方案1】:

你可以使用socket.use()

来自文档:

注册一个中间件,它是一个函数,它为每个传入的数据包执行并接收数据包作为参数,以及一个可选择将执行推迟到下一个注册的中间件的函数。

传递给中间件回调的错误作为特殊错误包发送给客户端。

io.on('connection', (socket) => 
  socket.use((packet, next) => 
    if (packet.doge === true) return next();
    next(new Error('Not a doge error'));
  );
);

【讨论】:

以上是关于如何为 Socket IO 通知实现度量中间件,应该跟踪发射和侦听器事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现socket.io的生存时间

如何为网站创建通知?

关于如何为聊天应用设计良好架构的建议?

如何为 Web Socket 实现服务器端错误处理

使用 socket.io node.js 和传入消息的通知系统的架构实现和设计

Flutter - 如何为消息应用程序实现通知?