我们会在 Meteor 中找到很多未记录的内容。我真的不认为这是一个问题。下面是一些在 Meteor 中拦截 WebSocket 流量的方法:
服务器
以下是您可以从服务器执行的一些操作:
Server
-> 客户
截取从服务器到客户端的消息有点繁琐,但这是可行的。您可能想要编写一些代码来将log
s 固定到客户端。
(function () {
var timeout = 3000
var streamServer = Meteor.server.stream_server
var standardConnect = streamServer.server._events.connection
streamServer.server._events.connection = function (socket) {
var write = socket.write
socket.write = function () {
console.log(arguments)
write.apply(this, args)
}
standardConnect.apply(this, arguments)
}
})()
客户->Server
要在服务器上拦截来自客户端的调用, 您可以执行以下操作:
Meteor.server.stream_server.server.addListener('connection', function (socket) {
var old = socket._events.data
socket._events.data = function () {
console.log(arguments)
old.apply(this, arguments)
}
})
上面的啜饮不能与第一个一起使用。修面团并不难。如果你使用这个snipped,Meteor.server.stream_server.server._events.connection
将只是一个函数数组而不是一个函数。
客户
服务器->Client
要在客户端监听从服务器到客户端的调用,您可以执行以下操作:
Meteor.connection._stream.on('message', console.log.bind(console))
您也可以使用类似这样的方法拦截它们
(function () {
var cb = Meteor.connection._stream.eventCallbacks.message[0]
Meteor.connection._stream.eventCallbacks.message[0] = function () {
console.log(arguments)
cb.apply(this, arguments)
}
})()
不完全确定那个有多坚固。但它有效,所以到底是什么。
要测试它,你可以简单地做
Meteor.subscribe('test')
Client
-> 服务器
正如您所指出的,您还可以对来自客户端的传出消息执行类似的操作。
Meteor.connection._send = function () {
console.log(arguments)
this.__proto__._send.apply(this, arguments)
}