有什么方法可以篡改socket.io在发送/接收之前发送的数据?我在考虑类似快速中间件的东西。
这样我就可以在调用普通的.emit()方法之后和调用socket.on(...)之前对数据进行编码。

在表达方面,我想像一下对BISON解码所有传入请求看起来像这样:

app.use(function(req, res, next) {
    req.body = BISON.decode(req.body);
    next();
});


现在,如何使用socket.io来完成,使发送的请求也自动编码?

我知道socket.io支持以类似形式表示的中间件,但这仅适用于socket.io发送来创建websocket连接的实际http请求...

io.use(function(socket, next) {
    //...
    next();
});


所以我怀疑这对这里没有帮助。

最佳答案

您可以通过侦听packet事件来拦截(和更改)数据,并类似地使用flush事件来拦截传出的消息:

io.use(function(socket, next) {
  socket.conn.on('packet', function(packet) {
    ...change `packet.data` here...
  });
  socket.conn.on('flush', function(packets) { // array of packets
    ...
  });
  next();
});


但老实说,我很难找到有关packet.data编码方式的文档,因此我无法提供完整的示例。

编辑:socket.io-parser具有decodeString()用于解析有效负载。可悲的是,它没有被导出(并且导出的方法都是异步的,不能与事件处理程序很好地结合在一起)。

09-25 16:38
查看更多