具体问题是这样的,自己实现了一个RMI服务端和客户端,服务都能连通的情况下没有问题,如果此时把RMI服务关掉(物理机器没有关掉),客户端连接上去时,也能很快响应报错,但是如果运行RMI服务的物理机器关掉(或者服务端的网线拔掉),此时,RMI客户端连接上去时,会长时间等待(因为连不上),然后报错,我的机器上测试大概需要21秒才能报错,也就是说这21秒时间内,客户端一直等在那边。有什么方法能够避免这种情况,不要等待那么长时间。
也就是说,比如下面的链接服务端的代码,"192.168.1.135"的IP根本ping不通(机器关掉或者是不存在的一个IP),会超时,大概要21秒才能报错,这对系统来说,不能接受,假设能设置时间,比如5秒连接不通就报错,那就不至于系统造成阻塞:
// 连接RMI服务端,如果连不通,希望不要等待很长时间
MyRMIClient client = new MyRMIClient("192.168.1.135", 1098);
相关资料我也查了很多,包括RMI的各种参数,我设置的主要参数如下:
System.setProperty("sun.rmi.transport.tcp.responseTimeout", "2");
System.setProperty("sun.rmi.transport.tcp.readTimeout", "2");
System.setProperty("sun.rmi.transport.connectionTimeout", "2");
System.setProperty("sun.rmi.transport.proxy.connectTimeout", "2");
System.setProperty("sun.rmi.transport.tcp.handshakeTimeout", "2");
我本以为sun.rmi.transport.tcp.handshakeTimeout就是我要的参数,这个参数是握手时间的设置,但是设置了以后还是不行(JDK1.5、1.6都试过,windows 7环境)。
问题补充:也考虑过是不是跟操作系统的一些参数有关,比如有tcp参数,看了一些资料,没找到答案。
相关推荐
2. **RMI客户端**(RmiClient): - **查找远程对象**:客户端首先需要通过`java.rmi.Naming.lookup()`或`Registry.lookup()`方法从RMI注册表中获取远程对象的引用。 - **调用远程方法**:获取到远程对象的引用后...
- 由于网络通信可能会出现异常,如网络中断或超时,因此客户端和服务端都需要妥善处理`RemoteException`和其他网络相关的异常。 5. **部署与运行**: - 服务端需要先启动,以便在RMI注册表中注册服务。 - 客户端...
- 错误处理:RMI调用可能会因为网络问题、超时或服务器故障导致异常,需要妥善处理。 - 不适用于实时系统:RMI的异步调用不直观,不适合实时或低延迟应用。 8. **RMI的替代技术** - Java RMI-IIOP(Java Remote ...
在Lucene的RMI应用中,我们需要创建一个实现了特定接口的远程对象,这个接口定义了远程搜索方法,然后在服务器端注册这个对象,客户端通过服务端注册表找到并调用这些远程方法进行搜索。 在实现Lucene 7.1 RMI远程...
- **注册服务器**:RMI的命名服务,用于存储远程对象的引用,客户端通过它查找并连接到远程对象。 **2. RMI的步骤** 创建RMI应用程序通常涉及以下步骤: 1. **定义远程接口**:创建一个接口,使用`java.rmi....
4. **错误处理**:在处理HTTP调用时,还需要考虑错误处理,例如超时、网络问题、状态码异常等。Spring提供了一套完善的异常处理机制,可以捕获并处理这些问题。 5. **安全性**:进行HTTP调用时,还需要考虑安全因素...
2. 类装载问题:确保客户端和服务端有相同的类路径,或者使用`java.rmi.server.codebase`属性指定类库的URL。 3. 安全限制:如果遇到安全管理器阻止RMI操作,可能需要修改安全策略文件,或者在运行时添加相应的...
- 错误处理:远程调用异常处理较为复杂,可能出现网络中断、超时等问题。 7. 源码分析: 博文中可能会深入到源码层面,分析RMI内部的工作机制,如`UnicastRef`类如何处理远程调用,`RMIServerSocketFactory`和`...
8. **异常处理**:由于网络通信的不确定性,RMI调用可能会遇到各种异常,如连接问题、超时或数据不匹配等。因此,良好的异常处理策略是必要的。 9. **安全性**:RMI提供了安全机制,允许对远程对象的访问进行权限...
在这个例子中,我们有一个服务端,它暴露了一个远程接口,以及一个客户端,该客户端能够调用服务端的方法。 1. **RMI的基本概念**: - **远程接口**:这是定义远程方法的Java接口,需要使用`java.rmi.Remote`作为...
4. **配置文件**:通常,Dubbo的配置会放在`dubbo.properties`或XML文件中,包括服务接口、版本、超时时间、重试次数等。配置文件可以全局配置,也可以在每个服务引用时单独配置。 5. **服务调用模式**:Dubbo支持...
在应用服务器层面,所有的客户端均通过持久性TCP+remoting(在Java环境下使用RMI)的方式与应用服务器进行交互,无需针对不同类型的客户端进行额外的定制化修改。 **1.4.2 可扩展性** 通过增加更多的**AgentAdapter*...
1. **建立连接**:客户端与服务端建立网络连接,通常是持久连接。 2. **请求封装**:客户端将调用信息(包括方法名、参数等)打包成特定格式的请求。 3. **请求发送**:客户端通过网络将请求发送给服务端。 4. **...
- 在客户端和服务端,都需要处理可能出现的异常,如网络中断、超时或服务器端返回的错误。 总的来说,Hessian案列代码展示了如何使用Hessian进行远程方法调用。通过对服务端的设置、客户端的调用以及处理序列化和...
在EJB3中,虽然RMI不再是最主要的通信机制,但动态代理的概念仍然适用,尤其是在自定义客户端和服务端通信逻辑时。 总结来说,JDK动态代理在EJB3和Web服务中扮演了重要角色,它使得开发者能够灵活地添加额外功能,...
RMI系统包括两部分:客户端和服务端。服务端暴露远程接口,客户端通过引用这个接口与服务端进行通信。RMI提供了自动序列化和反序列化、线程管理等功能,简化了分布式计算的实现。 2. **JDBC**:JDBC是Java连接...
- **连接控制**:管理客户端和服务端之间的连接,包括建立、维护和断开连接。 - **延迟连接**:在服务调用前才建立连接,以减少空闲连接的资源消耗。 ##### 9. 粘滞连接与令牌验证 - **粘滞连接**:客户端与服务端...
首先,DataSnap的核心是它的服务器和客户端组件,这些组件提供了丰富的接口和方法,用于创建和管理远程方法调用(Remote Method Invocation, RMI)。在C++Builder中,开发者可以使用TDSProviderConnection组件来创建...
4. **通信协议**:客户端和服务端之间的通信通常会使用HTTP/RESTful API或者基于TCP的自定义协议,例如使用Spring Web的`@RestController`和`@RequestMapping`注解来暴露HTTP接口,或者使用RMI(远程方法调用)、...
6. **HTTP协议**:讲解如何使用Java实现HTTP客户端和服务端,包括HTTP请求和响应的处理。 7. **HTTPS和安全通信**:介绍SSL/TLS协议,以及如何在Java中实现加密的网络通信。 8. **网络编程框架**:如Netty和...