有什么方法可以篡改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()
用于解析有效负载。可悲的是,它没有被导出(并且导出的方法都是异步的,不能与事件处理程序很好地结合在一起)。