在HAproxy中,我的websocket连接在50秒后关闭。如何改变它?

在HAproxy中,我的websocket连接在50秒后关闭。如何改变它?,websocket,tornado,haproxy,Websocket,Tornado,Haproxy,我用Haproxy和tornado来制作websocket。如果我直接连接到tornado,我的连接可以正常工作,但是如果我使用HAproxy和下面的配置,那么连接将在50秒后关闭。 下面是我的Haproxy配置文件 global daemon maxconn 4032 pidfile /var/run/haproxy.pid defaults mode http timeout connect 5000m

我用Haproxy和tornado来制作websocket。如果我直接连接到tornado,我的连接可以正常工作,但是如果我使用HAproxy和下面的配置,那么连接将在50秒后关闭。 下面是我的Haproxy配置文件

global
        daemon
        maxconn 4032
        pidfile /var/run/haproxy.pid

    defaults
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
        option  http-server-close
        maxconn 4032

    frontend http-in
        bind *:80
        acl is_websocket hdr_end(host) -i WebSocket
        use_backend servers if is_websocket
        default_backend servers
        option  redispatch
        option  http-server-close
        maxconn  2000
        contimeout  500000
        clitimeout  500000
        srvtimeout  500000
        contimeout  500000        
        timeout contimeout  500000 
        timeout connect  500000

    backend servers
        server server1 127.0.0.1:8886 maxconn 4032
现在,通过使用上面的配置,我的websocket连接在50秒后自动丢失。我想进行持久连接,那么有没有办法在HAproxy中实现持久连接?

我找到了答案

我在
defaults
部分中更改了
timeout connect 0ms、timeout client 0ms、timeout server 0ms,然后我的连接是持久连接,因为如果我给值0,它将是无限连接超时值

我的最终工作配置如下所示

global
        daemon
        maxconn 4032
        pidfile /var/run/haproxy.pid

    defaults
        mode http
        timeout connect 0ms
        timeout client 0ms
        timeout server 0ms
        option  http-server-close
        maxconn 4032

    frontend http-in
        bind *:80
        acl is_websocket hdr_end(host) -i WebSocket
        use_backend servers if is_websocket
        default_backend servers
        option  redispatch
        option  http-server-close
        maxconn  2000
        contimeout  500000
        clitimeout  500000
        srvtimeout  500000
        contimeout  500000        
        timeout contimeout  500000 
        timeout connect  500000
        timeout client  500000

    backend servers
        server server1 127.0.0.1:8886 maxconn 4032
我在默认值部分更改了超时连接0ms、超时客户端0ms、超时服务器0ms,然后我的连接是持久连接,因为如果我给值0,那么它将是无限连接超时值

您不应该这样做,因为这些选项也适用于常见的HTTP流量。 将超时连接/客户端/服务器设置为适当的值,并对WebSocket使用
超时隧道

建立双向连接时,隧道超时适用 在客户端和服务器之间,并且连接在客户端和服务器中都保持非活动状态 方向。此超时将取代客户端和服务器超时一次 连接成为一个隧道


(请参阅:)

如果您想了解更多信息,请参阅我的一封信:。简言之,与禁用超时不同,您应该像Phoenix那样发送心跳信号,以使连接保持活动状态,频率低于超时。