Javascript 用于管理RPC回调的方法

Javascript 用于管理RPC回调的方法,javascript,rpc,Javascript,Rpc,我正在构建(另一个)RPC客户端/服务器,用于在浏览器和Node.js服务器之间调用方法。(我这样做的原因是,我已经有了流和序列化,而且我还没有看到过简单地将对象流用于RPC的可靠解决方案。看起来很适合,但它只允许一次回调,并且在参数排序方面不灵活等等。) 我很难想出如何实现回调。假设在客户机上,我调用如下代码: rpcClient.someRemoteMethod('parameter1', 'parameter2', function callback1 () { // callback

我正在构建(另一个)RPC客户端/服务器,用于在浏览器和Node.js服务器之间调用方法。(我这样做的原因是,我已经有了流和序列化,而且我还没有看到过简单地将对象流用于RPC的可靠解决方案。看起来很适合,但它只允许一次回调,并且在参数排序方面不灵活等等。)

我很难想出如何实现回调。假设在客户机上,我调用如下代码:

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或其他东西来跟踪集合中的函数。但是,我应该在服务器端保留这些动态创建的回调多长时间

如果我创建了其中一个回调函数,除了回调集合中的引用之外,我如何知道对它的所有引用都已删除?我不想陷入这样一种情况:我在一个集合中有数以百万计的回调,只是因为其他代码可能会在某个时候调用它们


为了它的价值,几年前。我不知道它是否仍然适用。

可能将回调表示为[]
someRemoteMethod[0]
,并将回调数作为另一个参数包含在消息正文中?我会在回调后立即清理引用,否则您将实现TCP,试图验证数据是否成功地来回传输。再次阅读您的问题后,我对回调的位置有点困惑。在客户端还是在服务器上?如果它在服务器上,为什么客户端必须知道回调?假设我有一个可以多次调用的回调。或者,一个从未被调用的回调。在大多数情况下,客户端将具有回调函数,而服务器将简单地调用它。。。但这并不重要,因为返回值可以有另一个函数。基本上,如果要序列化一个函数,序列化端需要无限期地保留对该函数的引用,在远程端调用它时调用,因为没有“远程垃圾收集”,而且据我所知,没有方法计算引用。我只是找到了这个NPM包:它似乎是为我正在做的事情而构建的,但我想知道是否有另一种创造性的解决方案。否则,我必须猜测我希望销毁回调的时间限制。我不会跟踪服务器上的客户端回调。只要假设客户机每次调用时都会创建新的回调(即使它们是相同的回调),并允许客户机决定它们的寿命。