java nio网络开发问题

duanxincool 08-02-15
         

我自己写了一个nio服务器,实现是java.nio+线程池,现在有几个问题就是,为了防止客户恶意的来连接我的服务器,第一个问题:客户连接上了服务器后,一直不进行操作,也就是说是一个死连接,我该怎么处理,怎么解决,要怎么样才能让服务器检测到,本来在阻塞试的I/O操作中,可以设置settimeout来超时,可在非阻塞中超时是不起作用的.欢迎讨论,谢谢

         

banq
2008-02-15 18:21

靠线程Pool来控制连接上限来防止服务器崩溃,这是第一步,进一步判断恶意还需要更其他设计配合。
[该贴被banq于2008-02-15 18:22修改过]

duanxincool
2008-02-18 10:59

我在服务器方面还是新手,没有什么经验,总觉得nio比原来的阻塞方式有很多好处 但是也有一些不足的地方
在性能方便是有很大的提高
但是上面的问题没有解决,系统就显得很脆弱
试想如果有一个用户就写一个小的程序 同时连到你的服务器上
那么java肯定会出现告警
java.io.IOException: Too many open files
不信大家可以试试
这个是由于系统中文件描述有一个定义的数值
所以才一定要解决timeout的问题
大家知道有关这方面的解决方案,或者是自己的想法的欢迎讨论,另外banp前辈,你知道这方面的方案吗?能不能详细的说点,期待你的回答

Ericx
2008-04-29 19:55

能否在请求收到到处理之间加一个wrapper,自己使用timer一类的东西进行封装?
试试

winnerineast
2008-07-05 12:38

我也在写NIO的服务器,可能因为我定义了客户端的交互协议,所以我有用如下手法:
1.双监听端口,所有连接都是在公开端口校验成功后才转向隐藏监听端口进行实际的通讯。
2.心跳信号响应,在数据层定义心跳信息,如果客户没有回应我的心跳消息,就中断这个客户。