NIO 向客户端写数据阻塞问题?
用NIO写了一个前端应程序结构如下
有二个全局队列 一个是接收队列,一个发送队列
有三个线程
一个NIO线程
一个事件处理线程
一个数据发送线程(发给客户端)
NIO线程:
接收来自客户端的数据,并打包成事件数据放到接收队列中。
事件处理线程:
不断的从接收队列中取出事件数据,并做出相应的处理,把处理好的数据打包放到发送队列中
数据发送线程:
从发送队列中取出数据,并利用SelectionKey发获得通道发送数据
所产生的连接都是长连接.
证状:程序运行正常,但是当运行一段时间后,服务器就只能接收来自客户端的数据,却不能发送数据到客户端(更确切的说是在调用SocketChannel的write就一直阻塞着,但是NIO线程却运行正常,还在不断的接收来自客户端的数据).
我查JDK上面这样说调用SocketChannel的write时会产生阻塞的情况如下
可在任意时间调用此方法。但是如果另一个线程已经在此通道上发起了一个写入操作,则在该操作完成前此方法的调用被阻塞。
但是数据发送线程只有一个,不可能有二个线程同时调用SocketChannel的write方法的
Server代码地址:http://61.145.126.240:8080/Server.zip
Client代码地址:http://61.145.126.240:8080/Client.zip
还请哪位兄台能够帮忙一起找一下问题出在什么地方
如果以上代码地址不能下载,可以直接回复邮箱。
QQ:35376337
MSN:hw3344@hotmail.com
希望能一起讨论研究怎么样找到这个问题的所在....
------解决方案--------------------纯不懂……
------解决方案--------------------你的代码我这里因为没有高版本的JDK和eclipse所以不能调用运行,但你服务器端的socket你设置的是非阻塞的,你说的不太明确,你测试下是服务器端调用write方法后没有返回还是客户端没接收到数据,如果write方法返回了可查看下发出的字节数,如果没有返回,客户又没有收到数据,又没有报错的话就.....
------解决方案--------------------帮楼主顶一个
------解决方案--------------------学习