我使用的是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();
});