我想用套接字io将事件发送到一个瓶颈服务器。但是当我通过nxginx代理部署我的应用程序时,事件不会到达。Nginx + socketio:未到达事件
我的瓶服务器app.py看起来是这样的:
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route('/')
def index():
return "this is the index function"
@socketio.on('message')
def handle_message(message):
print('received message: ' + message)
if __name__ == '__main__':
socketio.run(app,debug=True)
事件是从客户端这样的发送:
var socket = io('http://my.ip.address.it');
...
socket.emit('message', 'here is my message 1');
当我部署我的本地主机上的服务器工作原理。但是当我通过nginx将它部署在EC2实例上时,偶尔会发送来自客户端的事件。
我nginx的代理的配置是这样的:
server {
listen 80;
server_name my.ip.add.it;
location/{
include proxy_params;
proxy_pass http://127.0.0.1:8000;
}
location /socket.io {
include proxy_params;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://127.0.0.1:8000/socket.io;
}
}
我这样开始我的服务器应用程序:
gunicorn app:app -b 127.0.0.1:8000
我如何设置我的瓶服务器是否正确?
SocketIO从WebSockets向长轮询,然后查询自动降级,如果有问题。如果发生这种情况,你可能会从前端的SocketIO客户端得知。 – jwg
它看起来像它,因为我看到:'POST http://my.ip.add.it/socket.io/?EIO=3&transport=polling&t=LwVSz8l&sid=4c6a4a2ebb3a4faebfbf3c451924a1ac 400(BAD REQUEST)''。当我禁用轮询时,我得到一个websocket握手错误。任何想法如何解决这个问题? – bear
我会查看/var/log/nginx/error.log和gunicorn日志(默认情况下发送到stderr)并查看是否可以找到此400错误。如果你发现它在gunicorn,应该有一个追溯或错误信息。如果您没有在gunicorn中找到它,那么nginx错误日志中可能会有某些内容解释请求失败的原因。 – jwg