apache rpc 设置超时不启作用的情况的处理

虽然大部情况下都是用WS,但RPC在某些情况下还是比较轻便的选择。

http://ws.apache.org/xmlrpc/


config.setConnectionTimeout(5000);
config.setReplyTimeout(6000);

问题主要从这两句代码开始,从网上找到的例子程序,设置这两个参数均不起任何作用,查看rpc的源代码发现在,其使用的TransportFactory并没有在进行socket的时候进行相应的设置,查看其他的TransportFactory,发现真正使用此参数设置socket的是XmlRpcCommonsTransportFactory工厂

XmlRpcClient client = new XmlRpcClient();
client.setTransportFactory(new XmlRpcCommonsTransportFactory(client));
client.setConfig(config);


重新设置传输工厂,得到了想要的效果。

现在我们在来说一说timeout与replytimeout

RPC进行网络通信同样使用的是jdk中的socket进行的。
所有 connectiontimeout对应于socket中的connecttimeout
replytimeout对应于socket中的sotimeout



Socket s = new Socket();
s.connect(socketAddress,2000); // 2 秒connect timeout超时
s.setSoTimeout(15000); // 15 秒io超时



看代码中的注释,connecttimeout是连接超时了,例如一个IP并没有在局域网中,你的PC向网络中发了一个包,长时间没有找到回应的主机,就会产生一个连接超时了。而sotimeout是IO超时,服务器已经找到了,而长时间得不到服务器的数据,也就是说socket没有在设置的时间内从IO中读到任何内容就会出再sotimeout超时

这部分更详细的情况可以参看JDK相应的源代码,但是JDK同样是调用dll文件中的方法实现的网络连接的操作,不知道有什么办法可以更详细的查看dll中相应的代码,如果你知道,请回复一下,共同学习。。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值