管理RPC的回调的方法

时间:2013-12-06 04:17:21

标签: javascript rpc

我正在构建(又一个)RPC客户端/服务器,用于在浏览器和Node.js服务器之间调用方法。 (我的理由是我已经有BinaryJS处理的流和序列化,并且我已经看到没有可靠的解决方案,只是使用RPC的对象流。rpc-stream似乎一个很好的拟合,但它只允许一个回调,并且参数排序不灵活,什么不是。)

我很难搞清楚如何实现回调。假设在客户端上,我调用了一些这样的代码:

rpcClient.someRemoteMethod('parameter1', 'parameter2', function callback1 () {
  // callback1
}, function callback2 () {
  // callback2
});

我希望客户端然后沿着这些行向RPC服务器创建一条消息:

{
    method: 'someRemoteMethod',
    parameters: ['parameter1', 'parameter2', /* something to reference callback1 */, /* something to reference callback2 */]
}

在服务器端,RPC服务器可以执行以下操作:

wrappedObject[data.method].apply(parameters);

我如何处理回调?显然,我需要动态创建一些函数,然后将一组参数发送回另一端,并将返回值重新洗回服务器。这不是太难...我可以有一组ID或其他东西来跟踪集合中的函数。但是,我在服务器端保留这些动态创建的回调多长时间?

如果我创建其中一个回调函数,除了我的回调集合中的引用之外,我怎么知道除去了对它的所有引用?我不想进入这样一种情况,即我在一个集合中有数百万个回调,因为其他代码可能会调用它们。

几年前的Socket.IO had a similar problem是值得的。我不知道它是否仍适用。

0 个答案:

没有答案