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套接字相同的方式重用?
答案 0 :(得分:0)
来自request
文档:
请注意,如果您在循环中发送多个请求并创建多个新池对象,则maxSockets将无法按预期工作。要解决此问题,请将request.defaults与池选项一起使用,或者使用循环外部的maxSockets属性创建池对象。
因此,您似乎需要在循环外部创建池对象,以便按预期重用套接字。
答案 1 :(得分:0)
在V8.7.0版之前的节点中,此行为已中断。 Unix域套接字的commit by user bengl修复保持活动被放入v8.7.0版本中。该版本大约在6天前发布。