RMI何时建立TCP连接



我有一个测试程序T,它是:

  • 从服务器S上的RMI注册表获取Remote对象O的存根
  • 在数百个并行线程中,调用此对象上的方法O

我可以看到服务器S有许多"RMI TCP连接"线程。我原以为只有一个,因为T上只有一个O的存根。这是怎么回事?

RMI需要每个线程的每个端点都有一个连接。它在客户端对它们进行池化,这反过来也会在服务器端导致池化,所以实际上并没有那么糟糕,但如果有1000个线程同时执行RMI调用,那么肯定会有1000个连接。它们不是多路复用的。

如果可能的话,RMI应该尝试重用服务器套接字和客户端套接字。

当服务器套接字工厂不相等时(当执行equals时,结果为false,并且再次建立连接),就会发生这种情况。也许存根还没有实现hashCode和equals,所以没有确定的方法来知道套接字是否可用。

最新更新