Как мне заставить этот пример websocket работать с Flask?
Я пытаюсь использовать библиотеку Кеннета Рейтца Flask-Sockets, чтобы написать простой интерфейс / сервер веб -сокетов. Вот что у меня так далеко.
from flask import Flask
from flask_sockets import Sockets
app = Flask(__name__)
sockets = Sockets(app)
@sockets.route('/echo')
def echo_socket(ws):
while True:
message = ws.receive()
ws.send(message)
@app.route('/')
def hello():
return \
'''
<html>
<head>
<title>Admin</title>
<script type="text/javascript">
var ws = new WebSocket("ws://" + location.host + "/echo");
ws.onmessage = function(evt){
var received_msg = evt.data;
alert(received_msg);
};
ws.onopen = function(){
ws.send("hello john");
};
</script>
</head>
<body>
<p>hello world</p>
</body>
</html>
'''
if __name__ == "__main__":
app.run(debug=True)
То, что я ожидаю, произойдет, когда я перейду на страницу колбы по умолчанию, http://localhost:5000
в моем случае я увижу окно с текстом предупреждения hello john
Однако вместо этого я получаю ошибку Firefox. Ошибка Firefox can't establish a connection to the server at ws://localhost:5000/echo
, Как мне сделать hello john
появиться в окне предупреждения, отправив сообщение на веб-сервер, а затем повторить ответ?
1 ответ
Решение
Использование gevent-websocket (см. Использование gevent-websocket):
if __name__ == "__main__":
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
server = pywsgi.WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
server.serve_forever()
Или запустите сервер с помощью gunicorn (см. Развертывание Flask-Sockets):
gunicorn -k flask_sockets.worker module_name:app