Flask SocketIO: ошибка во время рукопожатия WebSocket - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь установить sh соединение через веб-сокет, используя Flask -SocketIO, но я продолжаю получать сообщение «Ошибка при рукопожатии WebSocket: Неожиданный код ответа: 400» в консоли моего браузера.

Я используя браузер Chromium в Raspbian OS.

У меня установлен eventlet.

Вот код myapp.py:

from flask import Flask, jsonify, request, render_template
from flask_socketio import SocketIO, emit

import eventlet
eventlet.monkey_patch()

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
io = SocketIO(app)

clients = []

@app.route('/')
def index():
    return render_template('index2.html')

@io.on('connected')
def connected():
    clients.append(request.sid)
    print("client connected")
    print(request.sid)

@io.on('disconnect')
def disconnect():
    clients.remove(request.sid)
    print("client disconnected")
    print(request.sid)

if __name__ == '__main__':
    io.run(app, host='localhost', port=5000)

И это index2. html :

<html>
<br>

<head>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
   <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
</head>

<br>

<body>

   <h2>HELLO</h2>

   <script>

      $("document").ready(function(){

         var socket = io.connect('http://localhost:5000');

         socket.on('connect', function() {
            socket.emit('connected');
         });

      });

   </script>

</body>

</html>

Я запускаю приложение с помощью команды

python myapp.py

Когда я перехожу к http://localhost: 5000 , я вижу надпись "HELLO" на веб-странице , но я не получаю сообщение «клиент подключен», и в консоли браузера появляется сообщение об ошибке «Ошибка при рукопожатии WebSocket: непредвиденный код ответа: 400».

Кто-нибудь имеет представление, что не так

1 Ответ

0 голосов
/ 29 марта 2020

По какой-то причине сервер отклоняет соединение. Что вы можете сделать, это включить подробное ведение журнала на сервере:

io = SocketIO(app, engineio_logger=True, logger=True)

И затем при каждой ошибке 400 вы увидите дополнительную информацию об ошибке.

Очень вероятная причина из этих 400-х - перекрестная проверка, которая не удалась. Это не единственная возможная причина, наиболее распространенная среди клиентов веб-браузера. В этом случае вам необходимо добавить параметр cors_allowed_origins на сервер Socket.IO.

...