失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园

java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园

时间:2023-08-23 12:19:24

相关推荐

java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园

标准Java的RMI设置我所知道的有三种方式,其中第1、2种不区分框架均适用,但影响整个JVM级别的RMI服务

1.启动时设置sun.rmi.transport.tcp.responseTimeout,单位是毫秒

java-Dsun.rmi.transport.tcp.responseTimeout=50

2.在应用程序中设置环境变量sun.rmi.transport.tcp.responseTimeout

System.setProperty("sun.rmi.transport.tcp.responseTimeout","5000")单位也是毫秒

3.自定义socketfactory,具体用法参照官方这个指南

/javase/1.4.2/docs/guide/rmi/socketfactory/index.html

在Spring中,前面两种都能生效,第三种有些地方需要注意

1.在server端设置自定义的socketfactory

2.需要设置的是clientSocketFactory和serverSocketFactory这两个属性,而不是registryClientSocketFactory和registryServerSocketFactory,而且这两个属性要不全部设置,要不全部不设置,不能只设置一个

3.自定义的socketfactory必须实现Serializable接口(最好同时重写hashCode和equals方法)

具体用法如下:

server端配置

RMICustomClientSocketFactory.java

publicclassRMICustomClientSocketFactoryimplementsRMIClientSocketFactory,Serializable{

/**

*

*/

privatestaticfinallongserialVersionUID=2879181835011310833L;

privateinttimeout;

/**

*设置超时时间

*

*@paramtimeout

*/

publicvoidsetTimeout(inttimeout){

this.timeout=timeout;

}

@Override

publicSocketcreateSocket(Stringhost,intport)throwsIOException{

Socketsocket=newSocket();

socket.setSoTimeout(timeout);

socket.setSoLinger(false,0);

socket.setKeepAlive(false);

socket.connect(newInetSocketAddress(host,port),timeout);

returnsocket;

}

}

RMICustomServerSocketFactory.java

publicclassRMICustomServerSocketFactoryimplementsRMIServerSocketFactory,Serializable{

/**

*

*/

privatestaticfinallongserialVersionUID=8357061901854965297L;

privateinttimeout=17;

publicvoidsetTimeout(inttimeout){

this.timeout=timeout;

}

@Override

publicServerSocketcreateServerSocket(intport)throwsIOException{

ServerSocketserverSocket=newServerSocket(port);

serverSocket.setSoTimeout(timeout);

returnserverSocket;

}

}

在2.5.6和3.1.2中测试通过,另外在client端设置超时无效

标准Java的RMI设置我所知道的有三种方式,其中第1、2种不区分框架均适用,但影响整个JVM级别的RMI服务

1.启动时设置sun.rmi.transport.tcp.responseTimeout,单位是毫秒

java-Dsun.rmi.transport.tcp.responseTimeout=50

2.在应用程序中设置环境变量sun.rmi.transport.tcp.responseTimeout

System.setProperty("sun.rmi.transport.tcp.responseTimeout","5000")单位也是毫秒

3.自定义socketfactory,具体用法参照官方这个指南

/javase/1.4.2/docs/guide/rmi/socketfactory/index.html

在Spring中,前面两种都能生效,第三种有些地方需要注意

1.在server端设置自定义的socketfactory

2.需要设置的是clientSocketFactory和serverSocketFactory这两个属性,而不是registryClientSocketFactory和registryServerSocketFactory,而且这两个属性要不全部设置,要不全部不设置,不能只设置一个

3.自定义的socketfactory必须实现Serializable接口(最好同时重写hashCode和equals方法)

具体用法如下:

server端配置

RMICustomClientSocketFactory.java

publicclassRMICustomClientSocketFactoryimplementsRMIClientSocketFactory,Serializable{

/**

*

*/

privatestaticfinallongserialVersionUID=2879181835011310833L;

privateinttimeout;

/**

*设置超时时间

*

*@paramtimeout

*/

publicvoidsetTimeout(inttimeout){

this.timeout=timeout;

}

@Override

publicSocketcreateSocket(Stringhost,intport)throwsIOException{

Socketsocket=newSocket();

socket.setSoTimeout(timeout);

socket.setSoLinger(false,0);

socket.setKeepAlive(false);

socket.connect(newInetSocketAddress(host,port),timeout);

returnsocket;

}

}

RMICustomServerSocketFactory.java

publicclassRMICustomServerSocketFactoryimplementsRMIServerSocketFactory,Serializable{

/**

*

*/

privatestaticfinallongserialVersionUID=8357061901854965297L;

privateinttimeout=17;

publicvoidsetTimeout(inttimeout){

this.timeout=timeout;

}

@Override

publicServerSocketcreateServerSocket(intport)throwsIOException{

ServerSocketserverSocket=newServerSocket(port);

serverSocket.setSoTimeout(timeout);

returnserverSocket;

}

}

在2.5.6和3.1.2中测试通过,另外在client端设置超时无效

如果觉得《java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。