错误:套接字在Node.JS中不可写

我有一个简单的跟踪应用程序在Node.JS上运行,它基本上parsing了给定的URL,并返回一个1×1像素的gif图像。 每天几次我在日志中得到以下错误:

Error: Socket is not writable at Socket._writeOut (net.js:391:11) at Socket.write (net.js:377:17) at ServerResponse._writeRaw (http.js:392:28) at ServerResponse._send (http.js:372:15) at ServerResponse.write (http.js:622:16) at ServerResponse.end (http.js:682:16) at /var/www/app.js:221:7 at Server.<anonymous> (/var/www/app.js:234:3) at Server.emit (events.js:67:17) at HTTPParser.onIncoming (http.js:1124:12) 

我完全不知道是什么原因造成的。 任何想法在哪里看? (它发生在不同的UA上,虽然直到现在我只看到它发生,当请求来自Windows机器,但考虑到绝大多数机器是Windows,这并不意味着什么)。

你应该提交一个bug到https://github.com/joyent/node/issues?state=open

这可能违反了模块或系统HTTP模块中通常的stream写入协议:如果write()失败,请等待drain()事件。 所以你应该在你的代码中寻找失败的写入,并将HTTP模块编译到/ usr / bin / node二进制文件中,然后仔细检查是否遵守了漏洞等待。 排水事件很less见,所以很可能这个bug已经被忽视了很长一段时间了。

这个问题已经解决了,因为它实际上可能是由于你使用池的方式(即使在closures的意思之后,使用来自池的连接)。

解决的办法是使用client.pauseDrain()来允许重用池中的单个连接。

更多的信息,这个答案的来源是在这里 。