我在我的HAProxy前面使用SockJS servers,并且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 instance的3000条当前连接
我在这里的过程中遗漏了什么吗?
有什么不对的吗?
编辑
这是我的HAProxy配置
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发布于 2014-07-03 12:45:06
SockJS可以使用不同的协议,从WebSockets开始,下降到长Poll、AJAX和许多其他协议。每一个都将有不同的逻辑保持联系。
如果使用WebSockets,它是持久的TCP连接,如果它已关闭,则应该关闭它。而web服务器仍然可以保持它作为代理的行为。
要解决此类问题,您需要处理web服务器的设置,如保持活动、超时等,并找到解决方案,以确保HAProxy尊重node.js关闭连接逻辑。
https://stackoverflow.com/questions/22819947
复制相似问题