Я пару месяцев использовал идеальную библиотеку Flask-SocketIO с Python 3.До последней пары дней все работало как положено.
Все работает нормально, если пространство имен для подключения к серверу websocket остается по умолчанию /socket.io
.Но сейчас я получаю сообщение об ошибке, если пытаюсь изменить пространство имен для подключения к бэкэнду python flask-socketio.Мой app.py :
from flask import Flask, session, request, render_template, copy_current_request_context
from flask_cors import CORS, cross_origin
import flask_socketio as socketio
import ujson
async_mode = 'threading'
namespace = '/mynamespace'
app = Flask(__name__)
CORS(app)
app.config['SECRET_KEY'] = 'secret!'
sio = socketio.SocketIO(app, async_mode=async_mode)
@sio.on('connect', namespace=namespace)
def connect():
logging.info('Connected')
@sio.on('disconnect', namespace=namespace)
def disconnect():
logging.info('Disconnected')
@app.route("/home/index")
def home():
return render_template('index.html',
async_mode=sio.async_mode)
Я использую ./main.py
для запуска сервера, main.py содержит:
from app import app, sio
if __name__ == "__main__":
sio.run(app, debug=False)
My template/index.html
содержит тонну кода js, но я думаю, что наиболее ценным я загружаю socketio из cdn в голову:
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.5/socket.io.min.js"></script>
... и использую соединение с пользовательским путем к пространству имен, как вdocs:
namespace = '/mynamespace/socket.io';
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port,
{path: namespace});
socket.on('connect', function() {
socket.emit('Connected to server');
})
Как я понимаю, по умолчанию библиотека socketio пытается подключиться к бэкэнду с отправкой connect
сообщения в пространство имен.Во время загрузки шаблона «index.html» по маршруту «/ home / index» регистрация ошибок в консоли:
Сервер Flask также выдает и 404ошибка:
Мое лучшее предположение: в данный момент похоже, что что-то изменилось в JS-библиотеке на стороне клиента или в самом браузере Chrome (несколько дней назад)Я обновил Chrome).
Возможно, я просто неправильно понял одну маленькую деталь.Я очень признателен за помощь в решении этой проблемы.
Версии стека:
- Python 3.7.2,
- Flask 1.0.2,
- Flask-SocketIO 3.3.1,
- socketio.min.js 1.3.5,
- Google Chrome 77.0.3865.90 (64 бита)