closuresSockJS连接

我在我的SockJS servers前面使用了HAProxy ,并且遇到了SockJS连接不好的问题。

我的NodeJS代码:

 var sockjsSockets = {}; /** * SockJS Server */ var echo = sockjs.createServer({ log: function (severity, message) { // Skip logging }, disconnect_delay: 20 }); echo.on('connection', function (conn) { // Identify this connection sockjsSockets[conn.id] = conn; conn.on('data', function (message) { // Write... }); conn.on('close', function () { try { delete sockjsSockets[conn.id]; conn.close(); } catch (er) { console.log("EXCEPTION CLOSE SOCKJS ::::::::>>>>>>> " + er.stack); } }); }); 

sockjsSockets计数可以例如显示:400但是HAProxy显示了到该NodeJS NodeJS instance 3000个当前连接

我在这里的密切过程中错过了什么?

任何想法可能是错的?

编辑

这是我的HAProxyconfiguration

 global maxconn 400000 ulimit-n 800019 nbproc 1 debug daemon log 127.0.0.1 local0 notice defaults mode http option httplog log global stats enable stats refresh 60s stats uri /stats maxconn 32768 frontend secured timeout client 86400000 mode http timeout client 120s option httpclose option forwardfor bind 0.0.0.0:443 ssl crt /etc/nginx/ssl/ssl-bundle.pem ciphers RC4-SHA:AES128-SHA:AES:!ADH:!aNULL:!DH:!EDH:!eNULL acl is_sockjs path_beg /echo /broadcast /close # this is sockjs use_backend sockjs if is_sockjs 

SockJS可以使用不同的协议,从WebSockets开始,到Long Poll,AJAX和其他许多协议。 每个人将有不同的保持联系的逻辑。

在WebSocket的情况下,它是持久的TCP连接,如果它closures,那么它应该被closures。 虽然Web服务器仍然可以保持它的行为像代理。

为了解决这个问题,你需要为你的Web服务器使用诸如保持活跃,超时等设置,并发现解决scheme,以确保HAProxy尊重node.jsclosures连接逻辑。