Nodejs使用Unix域套接字保持活动状态

时间:2017-10-16 22:52:15

标签: node.js sockets unix

Keep-alive在TCP上工作得很好。但是Unix Domain Sockets给了我奇怪的行为。如果我发送这样的几千个请求:

request.post('http://unix:/tmp/http.sock:/check', {
  json: {
     ...
    },
  forever: true,
  pool: {maxSockets: 10},
  headers: {
    'Host': '',
    'Connection': 'keep-alive'
  })

内核跟踪将显示正在创建(并且从不关闭)的2000个套接字,每个请求一个。我希望只创建10个套接字并在必要时重复使用。

有没有办法设置,以便unix套接字保持活动并以与TCP套接字相同的方式重用?

2 个答案:

答案 0 :(得分:0)

来自request文档:

  

请注意,如果您在循环中发送多个请求并创建多个新池对象,则maxSockets将无法按预期工作。要解决此问题,请将request.defaults与池选项一起使用,或者使用循环外部的maxSockets属性创建池对象。

因此,您似乎需要在循环外部创建池对象,以便按预期重用套接字。

答案 1 :(得分:0)

在V8.7.0版之前的节点中,此行为已中断。 Unix域套接字的commit by user bengl修复保持活动被放入v8.7.0版本中。该版本大约在6天前发布。