如何为 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 通知实现度量中间件,应该跟踪发射和侦听器事件?的主要内容,如果未能解决你的问题,请参考以下文章