服务端
node+socket.io
测试工具
我使用的是websocket-bench进行并发测试。
服务器和测试都在本地。node 端采用多进程多端口。
问题:400 错误
但是测试的过程中发现,负载只在一个 ws 服务器的时候是没问题的,但是同时使用多个 ws 服务器,就会出现 400 错误,请求错误。
我初步估计是发送 ws 的 key 的时候和之后升级协议分配到了不同的服务器,导致不认这个请求,所以报 400 错误。如果还有其他可能,请指正。
nginx 配置如下
upstream io_nodes {
#ip_hash; # 实际需求肯定采用这个策略,但是本地压测使用的都是同一个 ip,将会导致请求只分配到同一个服务器上
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
server 127.0.0.1:8004;
}
server {
listen 8088;
server_name server.com;
error_log logs/error.log debug;
access_log logs/access.log;
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_pass http://io_nodes;
}
}
求解决方法
- 或许是希望好心人能提供能解决这种情况的测试工具
- 或许是一个正确的 nginx 配置或一致性策略
- 或许是个更好的服务端架构
我的毕设不解决这个问题大概就要吹了- -