我们在 Node.js 0.8.16 上运行一个 WebSocket 服务器,它非常频繁地接收来自客户端的遥测消息,这些消息使用常规 HTTPS 发送路由到后端服务器。
一段时间后,我们注意到与遥测服务的通信将失败(即使另一台后端服务器正常),
Error: 1240:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:openssl\ssl\s3_pkt.c:1234:SSL alert number 48
at CleartextStream._pusher (tls.js:656:24)
at SlabBuffer.use (tls.js:199:18)
at CleartextStream.CryptoStream._push (tls.js:483:33)
at SecurePair.cycle (tls.js:880:20)
at EncryptedStream.CryptoStream.write (tls.js:267:13)
at Socket.ondata (stream.js:38:26)
at Socket.EventEmitter.emit (events.js:96:17)
at TCP.onread (net.js:397:14)
社区似乎没有太多此类错误的经验 https://groups.google.com/forum/#!topic/nodejs/3YYAmGNq4NM
想知道是否有人遇到过类似的事情,帖子中提到的症状包括端口 443 上有大量打开和挂起的 FIN_WAIT_2 套接字。
http 和 https globalAgent 的 maxSockets 属性已设置为 20000,但即使连接数少得多,这也没有真正帮助。
最佳答案
为了更新情况,我 fork 了我们使用的底层 HTTP 客户端库 - ReSTLer - 以便调整它以退出使用连接池。
从那以后几个月都没有遇到过上述问题。
关于尝试通过 SSL 与后端服务器通信的 Node.js 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18528956/