日期:2014-05-20  浏览次数:20655 次

NIO tcp机制问题
用的NIO,我的印象中,服务端等待监听链接。

这个属于【被动】,都是一收一发(就是服务器收到数据,就返回给客户端数据)。

现在需要实现一个功能,


在【服务端】任意时刻,发生一个事件,不管收没收到到数据,就主动返回一串数据给客户端(TCP一直连起的,还是用的上面那个主要用于接收并返回数据的那一个IO)

我认为一个TCP的都是被动的,等待,一收一发。
要实现这个功能的话只能让这个事件发送的数据重新建立一个UDP或TCP吧?

我朋友跟我说,  一个线程用于收,一个线程用于发,分开就可以解决。不是服务端的tcp只能收到了数据再返回么?


                        try
                        {
                            // 处理IO事件
                                 if (key.isAcceptable())
                                accept(key);
                            else if (key.isReadable())
                            {
                               //执行读取客户端的数据
                            }
                            else if (key.isWritable())
                            {
                              //执行给客户端发数据
                            }
                        }
                        catch (Exception e)
                        {
                            key.cancel();
                            _log.info("处理key出错,连接可能意外中断了");
                            e.printStackTrace();
                        }

------解决方案--------------------
不用啊 服务器端可以主动推送数据