如何在node.js中处理慢速客户端连接?

时间:2014-11-09 11:00:53

标签: node.js

Node.js是单线程的。如果一个慢客户端发出请求,我想它可能会阻塞该线程直到它完成。这有意义吗?

如何处理慢速连接?如果连接耗时太长,是否有意义终止连接?如何判断这一点?如何衡量请求的持续时间,如果时间过长则终止请求?我没有提到发送回复所需的时间。我只是提到节点接收处理请求所需的所有数据所花费的时间。这是合法的情况吗?

我想必须有一些方法可以做到这一点,否则DOS攻击node.js服务器真的很容易......

编辑:在发布请求中,数据以块的形式进入。那么如果它只是慢慢进来呢?我不确定如何模拟这个。但是如果这是节点中的一个问题,它同样可能是PHP等中的一个问题,因为你只需要产生许多连接,所有连接攻击服务器的速度都很慢。

1 个答案:

答案 0 :(得分:0)

客户端请求数据是否缓慢进入并不重要。节点中的I / O是异步和非阻塞的。因此,如果一个数据块长时间无法在套接字上使用,那么节点可以在此期间执行其他操作,例如从其他套接字接收数据块。

您可以设置在套接字上没有数据所需的时间长度时触发的非活动超时。对于HTTP,您可以通过server.setTimeout()设置可以自动关闭底层套接字的全局请求超时,或者如果传入回调,则可以根据需要处理超时。对于TCP,有socket.setTimeout()