Java:这两种设置Socket超时时间的方法有啥不同吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:这两种设置Socket超时时间的方法有啥不同吗?相关的知识,希望对你有一定的参考价值。

方法一:
Socket s=new Socket("127.0.0.1",3000);

s.setSoTimeout(10000);

方法二:
Socket s=new Socket();

s.connect(new InetAddress(host,port),10000);

connect timeout 是连接超时, 比如30秒内连接不上。
Socket timeout 是连接上以后,server没有回应的超时。
参考技术A 方法一是inputStream.read()方法的阻塞时间,即等待服务端返回流的等待时长
方法二是客户端与服务端进行连接的超时时间,即xx秒内建立不了连接就报连接超时的异常
二者控制超时的侧重点不一样,就像打电话一样,方法二是打电话十秒你不接电话我就挂了,方法一是打电话接通后,等你十秒不说话就挂,十秒后说不说话都不听了
参考技术B 没什么区别 就只是在使用的时候函数不一样而已 好比吃饭你先吃饭还是先吃菜 还是一口菜一口饭的区别本回答被提问者采纳

java项目页面为啥会超时?

页面超时会弹出超时提示,但是为什么会超时呢?
是客户端没有想服务器发起请求?还是页面没有和数据库发起数据交互?或者其他的原因。
求热心的码神解答。

你说的是请求没有响应吧,首先检查服务器有没有错误的log,如果是调试,看看是不是存在断点,如果不是这两种情况,那么代码肯定是存在一定的问题,需要细心的排除代码哪里停住了,一般不会是直接的执行错误,执行错误页面会返回错误的页面比如404,500等等 参考技术A 是页面没有和服务器发起请求,和数据库没有关系

同时数据库连接也会超时的问题,这个就跟数据库连接池有关系了

举个简单例子,你登陆网上银行,一段时间不操作,就会超时不能发起请求了,必须重新登陆才行追问

您的意思是,项目设置了超时时间30分钟,30分钟之内页面没有向‘服务器’发起请求就算超时。
而不是页面没有向’数据库‘发起请求?

您的例子‘登陆网上银行’,页面跳转属于向服务器发起请求吗?

追答

直白点讲,只要你是点击网页的任何链接,提交的任何表单,都是想服务器发送请求

如果你在服务器设置的超时时间内没有发起以上方式的任何请求,那么就会超时

客户端一般来讲是不会直接操作数据库的

客户端(浏览器)------>服务器-------->数据库

本回答被提问者和网友采纳
参考技术B 这应该是session超时,而后台程序判断超时之后 页面弹出的提示.
一般中间件 例如:Tomcat 的session会话时间为30分钟 如果你不进行操作 会自动释放掉.
如果想不超时 只要修改配置就可以.追问

我设置的是30分钟。
我的意思是这样的,30分钟之内,不进行什么操作才会释放session?
是不点击页面?还是不发起请求?还是不查询数据?

追答

你所说的 点击页面 查询数据库 其实都归于发送请求.当前session就会处于空闲状态.就会释放掉.
说白了点 就是你开启系统之后,不发送任何请求.

参考技术C 可能是查询数据时,由于数据量比较多,或是逻辑处理比较多 参考技术D session超时?因为客户端没有发起请求。时间超过默认session超时时间

以上是关于Java:这两种设置Socket超时时间的方法有啥不同吗?的主要内容,如果未能解决你的问题,请参考以下文章

C ++类构造函数设置变量这两种方式有啥区别?

这两种方法有啥区别

C ++中这两种强制转换方法有啥区别? [复制]

java项目页面为啥会超时?

这两种方法有啥区别?是啥让第二个比第一个更好?

SVN权限设置两种方法有啥不同?