如何使用 node.js 发送“FIN”?
Posted
技术标签:
【中文标题】如何使用 node.js 发送“FIN”?【英文标题】:How to send the 'FIN' with node.js? 【发布时间】:2014-03-24 02:38:26 【问题描述】:更新:我在这里发布了这段代码,在我一一添加了所有(99%)的可能性之后,它仍然给了我 120 秒的超时......缓冲。
所以,好吧,我认为在我的 Windows 7 机器上需要 120 秒(好吧,122 秒),直到FIN
握手开始。我想马上去做。 HTTP RFC793 说
FIN:没有更多来自发件人的数据
在我看来,我不再发送任何数据。我尝试了所有这些臃肿的代码,仍然是Hello World
服务器...
var http = require('http')
var server = http.createServer(function (req, res)
res.writeHead(200, 'Content-Type': 'text/plain')
res.write('HELLO WORLD!\n')
res.end()
res.setTimeout(0)
req.abort() // 1) TypeError: Object #<IncomingMessage> has no method 'abort'
req.on('socket', function (socket)
socket.setTimeout(0)
socket.on('timeout', function()
req.abort()
)
)
)
server.timeout = 0
server.setTimeout(0)
server.listen(1337, '192.168.0.101')
-
那么 1) 怎么办? (其实是这样发
RST
的……)
以及如何做到整件事HTTP
符合?
当然最后我会很幸运地使用nodejs
和websocket
一样的东西和所有这些,但是如果我的网站上的转换意味着两分钟的事情,并且我有一百万并发用户(嗯?),发送FIN
立即可能意味着我有 200 万并发用户(算一下)。 ;) 好的,确定一点:发送FIN
表示套接字已关闭?
啊,嗯,好吧,既然你在,我怎么console.log(res)
或console.log(req)
?它给了我[object Object]
。 (更新:我试过console.log(res.toSource())
,给我TypeError
?编辑:找到答案here。
【问题讨论】:
【参考方案1】:如果要关闭连接,请发送connection: close
标头。如果你这样做,那么它不会让连接保持打开状态以供重复使用。
【讨论】:
谢谢先生!所以当我查看我的试验时,默认时间 120 秒是不可更改的? setTimeout(0) 完全消除超时。 setTimeout(1) 将使其为 1 毫秒。 嗯,我仍然有 2 分钟的超时时间,0
s。 :/周末没有再尝试了,陷入视差滚动哈哈。你到底是指哪个setTimeout
?
请记住,这可能不是您想要的。如果这是实时处理来自同一主机的多个连接,则保持活动将有助于提高性能,因为 http 请求不需要建立新的套接字。
嘿@jeremy。现在才看到你的评论。是的,我想为完成某些连接的任务做好准备(比如门卫;)。最后我发现:res.end()
独自完成这项工作(并发送标题)。以上是关于如何使用 node.js 发送“FIN”?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 HTML 输入文件导入 excel 文件并在 Node.js 中读取文件内容(如何将完整路径发送到 Node.js)
如何使用 Node.js 通过代理发送 HTTP/2 请求?
如何使用 Node.js 将 JSON 数据从 Node.js 发送和获取到 HTML