【问题标题】:How to send the 'FIN' with node.js?如何使用 node.js 发送“FIN”?
【发布时间】: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. 那么 1) 怎么办? (其实是这样发RST的……)
  2. 以及如何做到整件事HTTP符合?
    当然最后我会很幸运地使用nodejswebsocket 一样的东西和所有这些,但是如果我的网站上的转换意味着两分钟的事情,并且我有一百万并发用户(嗯?),发送FIN 立即可能意味着我有 200 万并发用户(算一下)。 ;) 好的,确定一点:发送FIN 表示套接字已关闭?

  3. 啊,嗯,好吧,既然你在,我怎么console.log(res)console.log(req)?它给了我[object Object]。 (更新:我试过console.log(res.toSource()),给我TypeError
    编辑:找到答案here

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    如果要关闭连接,请发送connection: close 标头。如果你这样做,那么它不会让连接保持打开状态以供重复使用。

    【讨论】:

    • 谢谢先生!所以当我查看我的试验时,默认时间 120 秒是不可更改的?
    • setTimeout(0) 完全消除超时。 setTimeout(1) 将使其为 1 毫秒。
    • 嗯,我仍然有 2 分钟的超时时间,0s。 :/周末没有再尝试了,陷入视差滚动哈哈。你到底是指哪个setTimeout
    • 请记住,这可能不是您想要的。如果这是实时处理来自同一主机的多个连接,则保持活动将有助于提高性能,因为 http 请求不需要建立新的套接字。
    • 嘿@jeremy。现在才看到你的评论。是的,我想为完成某些连接的任务做好准备(比如门卫;)。最后我发现:res.end() 独自完成这项工作(并发送标题)。
    猜你喜欢
    • 2016-04-19
    • 2021-01-18
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2020-01-29
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多