我正在使用socket下一些东西,但是有时后网络很卡,在取得s.getInputStream(),以后read()的时候,阻塞了,一个1024b的数组,要读很长时间
我想在read()进行比如1分钟还没有读完就退出,或者抛异常,应该怎样做???还有,我曾经尝试了nio,我在网上找了很长时间都没有上面这个问题的相关处理,nio在客户端如何使用异步I/O,就是即使我ReadableByteChannel rbc = Channels.newChannel(dis);
int length = rbc.read(buffer);这样做了,能保证read()方法不会阻塞吗?不明白啊,我觉得好像不会,十分迷茫????
我想在read()进行比如1分钟还没有读完就退出,或者抛异常,应该怎样做???还有,我曾经尝试了nio,我在网上找了很长时间都没有上面这个问题的相关处理,nio在客户端如何使用异步I/O,就是即使我ReadableByteChannel rbc = Channels.newChannel(dis);
int length = rbc.read(buffer);这样做了,能保证read()方法不会阻塞吗?不明白啊,我觉得好像不会,十分迷茫????
还有Socket本身有TimeoutException。
还有Socket本身有TimeoutException。
UP
socket本来就是可以设置超时的
然后捕捉Timeoutexception异常
还有Socket本身有TimeoutException。
1)用非阻塞
2)把阻塞放入线程
1.同步阻塞和异步非阻塞方式各自一般都在什么应用情况中使用?请解释一下原理
原理请看书,同步阻塞常用于大流量客户数少,非阻塞方式相反
2.当client发送过来的流大小不能确定,而服务器又必须把所有接受流拼接在一起后才能处理时,如何动态增加存储内存,以防止浪费内存的现象
采用内存池技术,即先自己分配一块很大的内存,然后自己对它进行管理,以后程序中需要分配
内存,全部从这块内存中提取,程序退出时只需要释放一次。
呵呵
如果用nio还可以用它的一些开源框架
这样只处理业务逻辑问题就可以了
前一段时间看了下mina
LZ有兴趣可以共同研究啊
Java的Socket本来就是阻塞的,如果想用非阻塞的,选用nio库。
还有Socket本身有TimeoutException。
不错