文档章节

RMI 连接超时时间设定

Y
 Y13
发布于 2016/05/14 01:40
字数 794
阅读 299
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

System.setProperty("sun.rmi.transport.tcp.responseTimeout", "2000");
System.setProperty("sun.rmi.transport.tcp.readTimeout", "2000");
System.setProperty("sun.rmi.transport.connectionTimeout", "2000");
System.setProperty("sun.rmi.transport.proxy.connectTimeout", "2000");
System.setProperty("sun.rmi.transport.tcp.handshakeTimeout", "2000");

 

我向如果问度娘也只能等到上面的内容了,但是当我们设定好了以后,也不好使,这个时候我们就怀疑是不是我们审定的值没有影响当其中的内容。其实不然,里面的数据已经被改写。

做一下分析:

这里最后可能应当链接超时的是“sun.rmi.transport.proxy.connectTimeout”。其实SUN说明文档中也是这么提出的:

The value of this property represents the maximum length of time (in milliseconds) that the Java RMI runtime will wait for a connection attempt (createSocket) to complete, before attempting to contact the server using HTTP. This property is only used when the http.proxyHost property is set and the value of java.rmi.server.disableHttp is false. The default value is 15000 milliseconds (15 seconds).

但是这个时候我们需要看清“http.proxyHost ”和“java.rmi.server.disableHttp”这两个属性,“This property is only used when......”。

该属性作用的类是:RMIMasterSocketFactory,有人会问我是怎么知道的,这个嘛,我说经验信吗?“看”个玩笑了。在Socket中设定断电,就可以看到其中的调用过程。

当时RMIMasterSocketFactory并没有提供源代码,也无法查到源代码。当时我可以看到这个类中的属性有connectTimeout,当然这个无法断定connectTimeout对应的就是“sun.rmi.transport.proxy.connectTimeout”,

当时我们看不见源代码,但是可以得到该类的字节码,在getConnectTimeout()方法中可以看到“ ldc <String "sun.rmi.transport.proxy.connectTimeout">”内容,表示它使用了“sun.rmi.transport.proxy.connectTimeout”个字符串,还有static{}(“静态构造方法”,作用是和对象的构造方法相同,区别是该方法值初始化静态变量)方法中第1223,1224行(把字节码内容拷贝当编辑器中)

22 invokestatic sun.rmi.transport.proxy.RMIMasterSocketFactory.getConnectTimeout() : long [308]
25 putstatic sun.rmi.transport.proxy.RMIMasterSocketFactory.connectTimeout : long [259]

(invoke, static sun.rmi.transport.proxy.RMIMasterSocketFactory.getConnectTimeout(),long):执行RMIMasterSocketFactory中的静态方法getConnectTimeout,返回值是long型)
(put,static sun.rmi.transport.proxy.RMIMasterSocketFactory.connectTimeout, long):自悟吧。

这两行表示执行getConnectTimeout()方法,对connectTimeout 静态属性进行赋值,(转为源代码就是 connectTimeout  = getConnectTimeout()),所以看得出在加载RMIMasterSocketFactory类的时候,就会获取“sun.rmi.transport.proxy.connectTimeout”属性中的值对connectTimeout 进行赋值,说以当程序在加载RMIMasterSocketFactory类前调用System.setProperty("sun.rmi.transport.proxy.connectTimeout", "2000");  就可以了。

System.setProperty("sun.rmi.transport.proxy.connectTimeout", "2000");
Naming.lookup( "rmi://xxx.xxx.xxx.xxx:xxxx/xxxxxxxx")

但是这样还是不行的。因为上面文档中说了。还有连个属性没有赋值了。

好吧,这条路我也算得上放弃了。

后来详细,其实RMI底层通信也是使用Socket的,在Socket中connect有连个实现,其中一个就是带有超时时间,所有这个时候我们就不实用Naming进行lookup,工具一个自己的Naming不就可以了嘛。

好吧,上面就当放屁了。下面才是正解

Naming.lookup("rmi://xxx.xxx.xxx.xxx:xxxx/xxxxxxxx");
  改为↓↓↓↓↓
Registry registry = LocateRegistry.getRegistry("xxx.xxx.xxx.xxx", xxxx, new RMIClientSocketFactory() {
@Override
public Socket createSocket(String host, int port) throws IOException {
Socket socket = new Socket();
socket.connect(new InetSocketAddress(host, port), 2000);
return socket;
}
}); // registry最好是全局一个的(一个IP对应一个registry,也可以是多个,这个只是建议)
registry.lookup("xxxxxxxx");

好了。可以了。至于绑定对象还是用Naming.rebing把,没有问题。的。。。。。

 突然想起一件事来着,本人在大连,求一份“高薪”工作:做过JAVA,C/C++, VBA。邮箱:836847172@qq.com

Y

Y13

粉丝 0
博文 30
码字总数 148304
作品 0
大连
高级程序员
私信 提问
加载中
请先登录后再评论。
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
6.2K
8
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
6
Password Manager Daemon

pwmd(Password Manager Daemon) 通过 Unix domain socket 提供服务,数据存储在加密的 XML 文件中,客户端必须提供密钥才能修改。支持多线程,可同时允许多个客户端同时连接。 特性 通过 ...

匿名
2013/03/12
428
0
StreetPass

StreetPass,最初是想模拟任天堂NDS掌机中的StreetPass开发的(但未完成,大体框架已可行)。适用于记录每天在街上偶遇的纸妹Or帅锅的信息。 原理是想采用Wifi hot技术,由此可以在搜索到附近...

口米巴
2013/03/18
1.6K
0
Linux 多屏幕管理软件--XRandR

XRandR是X Rotate and Reflect Extension(改变大小与旋转扩充)的缩写,用来在命令行界面中对linux系统中的 X窗口系统的多屏幕做出一些设定的软件,能更改外接屏幕的大小、分辨率等...

匿名
2012/10/22
3K
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库高频面试点,事务/乐观锁/悲观锁/CAS/MySQL存储引擎

事务的ACID特性是什么? 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读...

osc_45536bvu
42分钟前
16
0
大数据BI软件助力企业数字化转型

当下,「新基建」势头正盛,随着“新基建”成为热议话题,数字化也随之成为企业面临的新机遇和新挑战。新基建的核心就是数据,数据是数字经济和企业数字化转型的生产要素和发展动力。 再看看...

osc_0boqdoe2
44分钟前
0
0
凯旋创投来志刚:基因治疗新时代,大戏刚刚开始

  2017 年,全球第一个基因治疗方法 CAR-T 细胞药物 Kymriah 获得 FDA 上市批准,从此掀起了基因治疗的热潮。随着相关技术和政策的不断成熟,基因治疗市场也随之扩大。根据德勤发布的《引领...

osc_k3vwonkw
45分钟前
10
0
LightningChart.NET使用两个BarSeries创建简单的2D图表

本教程介绍了如何使用两个BarSeries创建简单的2D图表。 BarSeries将数据值表示为矩形条,并且可以用于以非常清晰的方式可视化数据之间的差异和方差。 在本教程中,BarSeries用于表示两年期间...

roffey
46分钟前
0
0
Mybatis trim 标签的 2 个妙用!

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼...

osc_x03qsedc
46分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部