gpt4 book ai didi

node.js - 关闭 SockJS 连接

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:45 24 4
gpt4 key购买 nike

我正在使用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显示 3000 左右的当前连接 NodeJS instance

我在这里的关闭过程中遗漏了一些东西吗?

有什么想法可能是错误的吗?

编辑

这是我的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

最佳答案

SockJS 可以使用不同的协议(protocol),从 WebSockets 开始,到 Long Poll、AJAX 等等。其中每一个都有不同的保持连接的逻辑。

如果使用 WebSockets,它是持久的 TCP 连接,如果它被关闭,那么它应该被关闭。虽然网络服务器仍然可以保留它,因为它的行为就像代理一样。

要解决此类问题,您需要对 Web 服务器进行诸如保持事件、超时等设置,并找到解决方案以确保 HAProxy 尊重 Node.js 关闭连接逻辑。

关于node.js - 关闭 SockJS 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22819947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com