JAVA 的Socket api为什么没有接收和发送超时的参数

JAVA 的Socket api为什么没有接收和发送超时的参数,记得c语言中socket实现还有这两个参数可设,那java如何处理socket接收和发送时间很长的问题呢?

每次轮询都是一次检查,你可以决定轮询多长时间,也可以用NIO socket,有数据事件才会通知激活,无需你判断。

具体场景可能是这样的,浏览器端经tomcat等web容器访问应用的serlvet,该servlet进行具体的业务操作,比如是一个很费时的数据库的查询,先不论这个查询为什么费时,有没有优化余地,我现在就假设他就是很费时,有个几分钟才返回结果,我们知道tomcat的实现底层就是java scoket api,这样很可能就有问题,浏览器和tomcat建立了底层socket连接,浏览器端等半天没有数据来,会不会主动把连接关闭了,要不这么长时间占用连接,也是不合理的。tomcat等数据库端数据半天也没来。会不会也把连接关闭了,等查询结束,tomcat把结果往socket里写时,发现socket远端已经关闭了,会抛出异常,如果有发送超时,接收超时等参数可设置,是不是就能解决这中发送和接受很长时间的问题,特别说明:tomcat5.5是没有nio的

这个问题也可以这样模拟,serlvet业务方法中让当前线程sleep个几分钟,你会发现就有问题了。我就是想知道,java的scoket api为什么就没有考虑过这样的问题呢

>scoket api为什么就没有考虑过这样的问题呢
因为事件触发reactor模式效率最高,所以直接跳到最好的解决方案。

如果服务器处理时间比较长,通常都采用异步的方式。