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个当前连接
我在这里的密切过程中错过了什么?
任何想法可能是错的?
编辑
这是我的HAProxy
configuration
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连接逻辑。