因此,我在使用 HAProxy 对端口 8888 上的 socket.io 进行负载平衡时遇到了问题。我的设置是 NGINX 在端口 80 上侦听,并在端口 80 上运行的 Tornado Web 服务器实例之间进行负载平衡。然后,在同一个负载平衡器上,我有一个 HAProxy 实例在端口 8888 上侦听,将请求转发到托管 TornadIO 的网络中的其他计算机服务器实例也在 8888 上运行。连接在前 30 秒左右工作,然后开始反复断开/重新连接。需要注意的重要一点是,它似乎在第一次尝试心跳时就中断了……与第一次连接尝试/交换的前几条消息相比,心跳是 HAProxy 会遇到问题的不同协议吗?
有趣的是,当 tornadIO 实例与负载均衡器在同一台计算机上运行时,即使 HAProxy 工作(但连接端口 8888 并假设 tornadIO 实例在端口 9000 上),这种情况也不会发生。
需要注意的是,在整个过程中 TornadIO 不会抛出任何异常或任何异常输出,表明它不是我的服务器代码,而是代理层中的某些东西?
还要知道我正在使用 RabbitMQ 来同步所有 TonadIO 集群,而不是我认为这很重要(并且 HAProxy 不会触及 Rabbit)
这是我的 HAProxy 设置:
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen http-in
balance roundrobin
option forwardfor # This sets X-Forwarded-For
timeout queue 5000
timeout server 86400000
timeout connect 86400000
bind *:8888
server server1 18.181.3.164:8888 # ether1
在我的 nginx 配置中,我插入了:
location ~* \.(eot|ttf|woff)$ {
add_header Access-Control-Allow-Origin *;
}
确保它不是访问控制问题(控制台没有说它是,所以它不应该是)。
我也尝试过添加
option http-server-close
option http-pretend-keepalive
到我的 HAProxy 配置,但无济于事。
有任何想法吗?
** 我在 Chrome 9.0.597 和 Firefox 3.6 中进行测试(所以有两个网络套接字,没有相同的东西)