文档章节

RMI 连接超时时间设定

Y
 Y13
发布于 2016/05/14 01:40
字数 794
阅读 20
收藏 0
点赞 2
评论 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
大连
高级程序员
jvm启动参数整理

杂项 -classpath your_dir : 指定目录,jvm将会默认加载该目录下的类 -Djava.library.path=library_dir : 指定java的JNI相关文件dll的位置 -server : jvm将会以server模式启动应用,启动较...

GameKing ⋅ 2016/12/28 ⋅ 0

咨询一个spring做rmi在服务器之间连接不通的问题

使用spring写了一个rmi的服务端和客户端程序,服务端以jar包部署到服务器a。客户端以用spring将这个rmi注入到service,本地程序调试时调用服务器a上的rmi成功。但是把客户端程序部署到服务器...

Mr_Sky ⋅ 2017/02/05 ⋅ 3

java socket connect超时设置无效!

查看了jdk的api后,Socket的connect(SocketAddress endpoint,int timeout)第二个参数是可以设置超时时间的,在时间没有到之前,连接请求会一直阻塞。 我代码如下: try { String path = "/";...

名称终被备注代替 ⋅ 2015/05/21 ⋅ 1

nginx标准配置文件

#nginx.conf #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 workerprocesses 1; #全局错误日志及PID文件 errorlog /var/log/nginx/error.log; pid /var/run/nginx.pid; #工......

木雨山 ⋅ 2011/11/09 ⋅ 0

linux下tomcat设置最大连接数,设置最大内存,使用Jconsole监控

添加tomcat管理员帐户 添加管理员账户tomcat-users.xml <?xml version='1.0' encoding='utf-8'?><tomcat-users><role rolename="tomcat"/><role rolename="role1"/><role rolename="manager......

Zero__One ⋅ 2012/08/24 ⋅ 0

ZooKeeper 的安装 以及配置说明

Zookeeper的安装和配置十分简单, 既可以配置成单机模式, 也可以配置成集群模式. 下面将分别进行介绍. 单机模式 下载zookeeper的安装包之后(http://mirror.bit.edu.cn/apache/zookeeper/),...

Edwyn王 ⋅ 2015/04/13 ⋅ 0

nginx对后端节点的健康检查

最近梳理了下手头的业务,发现nginx层配有几种健康检查方式,在这里做个总结,记录下nginx做负载均衡时对后端节点的健康检查方式: 1、ngxhttpproxy_module 模块中的下面三个指令(nginx自带...

西鼠 ⋅ 2017/08/30 ⋅ 0

mysql的连接超时设置

测试中的新项目有个奇怪的现象,每天早上不能访问,后台报Software caused connection abort: socket write error 错误,重启一下就好了。经查是MySQL连接超时设置的问题。默认的waittimeout...

jch_zhao ⋅ 2017/07/05 ⋅ 0

数据库超时空闲失效-dbcp连接池参数优化

问题描述: mysql dba在mysql服务端启用了连接在空闲一定时间 (10分钟) 后,就自动关闭连接(连接失效)的功能,导致java端连接池在空闲一段时间后,连接被自动关闭(自动失效)。为了避免这种情况...

天天顺利 ⋅ 2016/03/15 ⋅ 0

w3wp进程发生死锁ISAPI '..\aspnet_isapi.dll' 报告它自身有问题,原因'Deadlock detected'

ISAPI 'c:windowsmicrosoft.netframeworkv2.0.50727aspnet_isapi.dll' 报告它自身有问题,原因如下: 'Deadlock detected' 这个问题,字面意思是程序发生死锁了,它会导致w3wp进程重启。通常这...

长平狐 ⋅ 2012/06/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具

压缩打包介绍 使用压缩工具的好处: 使用压缩文件,不仅可以节省磁盘空间,而且在传输时还能节省网络宽带。 我们通常讲的家用宽带和机房宽带100M是有区别的: 机房宽带的上行和下行都是100M,...

Linux_老吴 ⋅ 16分钟前 ⋅ 0

SpringBoot热部署加持

概述 进行SpringBoot的Web开发过程中,我们很多时候经常需要重启Web服务器才能保证修改的 源代码文件、或者一些诸如xml的配置文件、以及一些静态文件生效,这样耗时又低效。所谓的热部署指的...

CodeSheep ⋅ 22分钟前 ⋅ 0

OSChina 周六乱弹 —— 假如你被熊困到树上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》 《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》- 谢...

小小编辑 ⋅ 53分钟前 ⋅ 5

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 今天 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部