是否为socket.io ack/responses发出了事件



我使用的是socket.io,并用feathersjs表示两者。为了收集指标,我试图捕捉通过Express和socket.io发出的请求的往返行程。

使用express中间件,express端很容易。

我可以通过socket.use:捕获socket.io入站请求

const app = express(feathers());
... (set up feathers services etc.)
app.configure(socketio(function(io) {
io.use(function(socket, next) {
socket.use((packet, next) => {
... (extract the verb and pathing info from the packet)
next();
});
next();
});
});

但是,我在出站/确认端找不到任何等效的socket.use。engine.io里面有一些活动,但我无法访问。

我真的在尝试为每个请求/响应找到一组等效的事件(后者等效于express中的finish(。

我不能在此处使用连接/断开连接事件;我想捕获通过套接字发出的每个请求以及为它们发送的响应,而不考虑羽毛服务和模块。

Feathers.js钩子可以用于此操作,但这需要将一堆上下文从socket.io中间件传递到羽毛中,而我希望不要这样做

有人知道怎么做吗?

如果有人来这里想办法做到这一点,我不知道为什么我没有早点想到。

入站数据包(在socket.use中可用(将包括一个函数,作为其最后参数(如果应该确认(。

包装最后一个函数以注入我自己的逻辑起作用了。

伪码

socket.use((packet, next) => {
const id = uuidv4();
console.log(`start of request: ${id}`);
const cb = packet[packet.length - 1];
if (typeof cb === 'function') {
packet[packet.length - 1] = function() {
const [err, data] = arguments;
console.log(`end of request: ${id}`);
if (err) {
console.error(err);
}
cb(err, data);
};
};
next();
});

相关内容

  • 没有找到相关文章

最新更新