我正在尝试向一个已有的应用程序添加一个端点,该端点发送服务器推送事件。通常可能会没有任何事件约5分钟左右。我希望配置该端点,即使响应在约1分钟内未完成,也不会切断我的服务器,但所有其他端点会在服务器未能响应时超时。
是否有一种简单的方法在HAProxy中支持服务器推送事件?
我正在尝试向一个已有的应用程序添加一个端点,该端点发送服务器推送事件。通常可能会没有任何事件约5分钟左右。我希望配置该端点,即使响应在约1分钟内未完成,也不会切断我的服务器,但所有其他端点会在服务器未能响应时超时。
是否有一种简单的方法在HAProxy中支持服务器推送事件?
这是我对HAProxy和SSE的建议:在HAProxy中有许多自定义超时选项,并且有两个有趣的选项适合你。
timeout tunnel
指定了用于Websockets、SSE或CONNECT的隧道连接的超时时间。绕过服务器和客户端超时。
timeout client
处理客户端失去连接的情况(网络丢失,在结束会话的ACK之前消失等)。
在你的haproxy.cfg
文件中,这是你应该做的,首先在你的defaults
部分:
# Set the max time to wait for a connection attempt to a server to succeed
timeout connect 30s
# Set the max allowed time to wait for a complete HTTP request
timeout client 50s
# Set the maximum inactivity time on the server side
timeout server 50s
直到这里都没有什么特别的。
现在,还在defaults
部分中:
# handle the situation where a client suddenly disappears from the net
timeout client-fin 30s
接下来,转到您的backend
定义并添加以下内容:
timeout tunnel 10h
我建议一个高值,10小时似乎可以。
你还应该避免使用默认的http-keep-alive
选项,SSE不使用它。 相反,请使用http-server-close
。
timeout server
设置为两倍的延迟。 - Claude Brisson