Python Flask-socketio работает, не получает данные от JS-клиента

Я пытаюсь настроить базовый веб-сокет, используя flask-socketio и библиотеку javascript socket-io на переднем конце. Внешний интерфейс успешно регистрирует соединение. Однако в консоли Python мои сообщения журнала не работают, и нет никаких указаний на то, что сервер отвечает на мои запросы.

Все, что я получаю в консоли при подключении, это: "GET /socket.io/?EIO=3&transport=polling&t=MJHl5WD HTTP/1.1" 200 - 127.0.0.1 - - [25/Jul/2018 09:58:58] "POST /socket.io/?EIO=3&transport=polling&t=MJHl5WQ&sid=b2a1f92c18e349c5a11df25e5001766c HTTP/1.1" 200 -

Таким образом, соединение работает, однако на задней панели ничего не выводится так, как должно.

Вот JS:

var socket=io('http://127.0.0.1:5000');
socket.on('connect',function(){
    console.log("connected");
socket.emit('client_connected',{data:"testsend"});

});
socket.on('update',function(data){
console.log(data)
});

И питон:

import json
import urllib3
from bs4 import BeautifulSoup
from flask import Flask, jsonify, render_template, request
from flask_socketio import SocketIO, send, emit

app=Flask(__name__)
socketio= SocketIO(app)
if __name__ == '__main__':
    socketio.run(app)
socketio.emit('update',{'data':"test"});

@socketio.on('client_connected')
def handle_client_connect_event(data):
    print("connected")
    print(str(data))    
@socketio.on('disconnect')
def disconnected():
    print('disconnected')
@socketio.on('connect')
def connected():
    print('connected')

Ни одна из строк @socketio.on не работает, и событие «обновление» тоже не работает. Помощь будет принята с благодарностью.


person Yousef Haggy    schedule 25.07.2018    source источник
comment
Почему определения событий находятся под вызовом socketio.run()? Это блокирующий вызов, вам необходимо определить события до вызова run().   -  person Miguel    schedule 28.07.2018
comment
Не имел понятия! Спасибо за информацию, я думаю это все! Если вы опубликуете это как ответ, я могу принять его   -  person Yousef Haggy    schedule 28.07.2018


Ответы (1)


Определения событий находятся ниже socketio.run(), который запускает сервер и блокирует, поэтому они никогда не регистрируются. Если вы переместите их выше этого вызова, они должны просто работать.

person Miguel    schedule 31.07.2018