python依赖:
flask
flask_socketio
uwsgi
gevent
/web/__init__.py
from flask import Flask
from flask_socketio import SocketIO, emit
app = Flask(__name__)
socket_io = SocketIO(app)
@socket_io.on('test')
def handle_my_custom_event(json):
print(json)
emit('my response', json)
/web/static/index.html
<script type="text/javascript" src="./socket.io.min.js"></script>
<script type="text/javascript" charset="utf-8">
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('connect', function() {
socket.emit('test', {data: 'I\'m connected!'});
});
</script>
/run.sh
#!/bin/sh
uwsgi --http :8000 --gevent 1000 --http-websockets --master --module web --callable app
然后访问http://127.0.0.1:8000/static/index.html。抓包400错误无法访问socket.io
上的使用方法来自flask_socketio文档。其中下面的使用nginx代理的方式也用过了。没有用一样是400。
上面的uwsgi只能在linux上用。。我全部都是在docker中做的测试。
黄舟2017-04-18 09:57:46
uwsgi는 이해하지 못합니다.
Gunicorn을 사용하고 있는데 같은 문제가 발생합니다.
문서를 확인한 후 맞춤형 gevent 웹 서버를 사용하여 문제를 해결했습니다.
gevent 작업자 및 gevent-websocket에서 제공하는 WebSocket 지원과 함께 gunicorn을 사용하는 경우 서버를 시작하는 명령을 변경하여 WebSocket 프로토콜을 지원하는 사용자 지정 gevent 웹 서버를 선택해야 합니다. 명령은 다음과 같습니다.
gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 module:app
pip install gevent-websocket