Java RMI连接池详细信息

Java RMI连接池详细信息,java,sockets,rmi,connection-pooling,Java,Sockets,Rmi,Connection Pooling,我正在研究一个JavaRMI主题,需要一些关于客户端连接池的信息。在文献和文件中,这些主题没有明确的答案。我知道连接池不是RMI规范的一部分。但是在一些实现中(例如SUN的实现中),它是完成的。所以我的问题是关于这个实现 我假设RMI套接字工厂创建的套接字(java.net.socket)缓存在池中。对吗 如何保存这些连接?我只想使用HashMap,目标ip/端口作为键,套接字作为值 使用超时关闭套接字。如何获得有关连接空闲时间的信息?最后一次使用连接时可能会有某种时间戳。请记住,我只是在谈论S

我正在研究一个JavaRMI主题,需要一些关于客户端连接池的信息。在文献和文件中,这些主题没有明确的答案。我知道连接池不是RMI规范的一部分。但是在一些实现中(例如SUN的实现中),它是完成的。所以我的问题是关于这个实现

我假设RMI套接字工厂创建的套接字(java.net.socket)缓存在池中。对吗

如何保存这些连接?我只想使用HashMap,目标ip/端口作为键,套接字作为值


使用超时关闭套接字。如何获得有关连接空闲时间的信息?最后一次使用连接时可能会有某种时间戳。

请记住,我只是在谈论Sun实现:

我假设套接字(java.net.socket)是由 RMI套接字工厂缓存在池中。对吗

是的,在它从远程调用中释放之后,当然,远程调用在请求套接字工厂创建新套接字之前首先在池中查找

如何保存这些连接?我希望使用HashMap 以目标ip/端口为键,套接字为值

让我们假设在逻辑上必须有一个从ip:port到Socket的映射。实施细节实际上并不重要

使用超时关闭套接字。网上的信息如何 获得连接空闲时间


通过记录连接放入池的时间。

在Oracle/OpenJDK中,到特定端点(特定通道)的(空闲)连接列表保存在
列表sun.rmi.transport.tcp.tcpcchannel 35; freeList
中。没有最大尺寸。有一个收割者线程,它检查套接字空闲时间是否超过15秒(
-Dsun.rmi.transport.connectionTimeout=15000

通道作为WeakHashMap存储在
Map sun.rmi.transport.tcp.tcpttransport#channelTable


顺便说一句,在接受端有一个可能的(全局)处理线程限制(
-Dsun.rmi.transport.tcp.maxConnectionThreads=unlimited
)。从
sun.rmi.transport.proxy.rmistersocketFactory开始