发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

为何在nio模式下无法设置setSoTimeout

2004-06-29 13:17
赞助商链接

SocketChannel incomingChannel = readyChannel.accept();
Socket tmpSocket = incomingChannel.socket();
tmpSocket.setSoTimeout(120000);

以上代码是在nio的模式下,通过设置socket的超时来缓解恶意用户的攻击,但是实际却无法得到相应的效果,即setSoTimeout无法生效,但是不会报错.
如果不这样实现,请问一下咳有没有别的方法可以防止恶意用户的DOS攻击.

就像你telnet到一个服务器上 如果超过一定的时间没有发信息就自动会被挂断的那样,服务器是怎么实现的?用原来的阻塞模式都没有问题!

2004-07-03 14:25

防DDOS攻击不是从应用程序方面解决的,必要从操作系统层面解决,从TCP底层解决,具体可参考购买或租用“黑洞”这样专用防火墙,我用过,效果不错。

2004-07-13 16:57

自己写代码解决,用一个SocketManager管理所有的socket,并定时判断状态

2004-07-13 16:59

还有,nio对这个问题的敏感性远比阻塞式的server要弱很多,很多情况下都可以忽略这个问题。idle的连接几乎不会产生什么损耗,也不会降低nio服务器的性能。

2004-07-20 13:13

总觉得nio比原来的阻塞方式有很多好处 但是也有一些不足的地方
在性能方便是有很大的提高
但是上面的问题没有解决就很 系统就显得很脆弱
试想如果有一个用户就写一个小的程序 同时连到你的服务器上
那么java肯定会出现告警
java.io.IOException: Too many open files
不信大家可以试试
这个是由于系统中文件描述有一个定义的数值
所以才一定要解决timeout的问题

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com