问题描述
我在 docker swarm + Nginx for load balancing
内运行了一个 SocketIO 服务器,它运行良好。
示例:我有 SocketIO server
的 30 个副本(副本); 1 Nginx gateway
以及在 Docker Swarm
我的 Nginx 配置:
server {
listen 80;
server_name 10.10.10.212;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://loadbalancer;
# enable WebSockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
我的 SocketIO 服务器发出
socketio.emit('warehouse_scan:added','HB10790')
浏览器结果
我该如何解决这个问题?
解决方法
发出重复事件是我的错误。 我在使用 nginx 设置所有内容时设置了错误的参数,匹配客户端版本等...
后端配置错误:
socketio = SocketIO(app,logger=True,engineio_logger=True,policy_server=True,async_mode='eventlet',manage_session=True,cors_allowed_origins="*",message_queue=socket_io_msg_q)
修复重复的正确方法:
socketio = SocketIO(app,manage_session=True)
问题出在这一行:
message_queue=socket_io_msg_q <-- error!
这将触发从后端服务器到 REDIS 的所有发出事件,然后返回到客户端。如果我有 50 个副本,客户端将收到来自这些副本的消息量。