当Meteor客户端(或DDP客户端)通过DDP连接调用服务器端方法时,我想要在Meteor项目的服务器上执行横切/AOP或其他函数的场景。
这个链接这里给出了一个关于如何在对象上执行AOP的很好的例子,但是我想知道是否有一种方法可以监听DDP连接上的入站客户端请求,就像asp.net web的快递拦截器或动作过滤器一样,但是当然,对于websocket/ddp实现也是如此。
Meteor只描述服务器上的一个事件"onConnection“。而且这个所以响应提到了客户机上执行某些AOP的connection._send,除此之外,functions...but没有找到大量的官方文档。
我基本上想知道是否有一种方法可以在服务器上侦听从所有客户端会话到服务器的所有DDP方法调用,如DDP规范这里中所述。
谢谢。
发布于 2015-09-06 21:56:09
我们会在“流星”里找到很多没有记载的东西。我并不认为这是个问题。下面是在Meteor中拦截WebSocket流量的一些方法:
服务器
以下是您可以从服务器上做的一些事情:
Server ->客户端
从服务器截取消息到客户端有点繁琐,但这是可行的。您可能会想要编写一些代码来将log连接到客户端。
(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)
}
})()Client -> 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)
}
})上面的小口不能和第一个一起用。修面团不难。如果使用这个片段,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)
}https://stackoverflow.com/questions/32427588
复制相似问题