Сервер разработки Flask, обслуживающий поврежденный файл socket.io.js

Я пытаюсь создать приложение, которое использует SocketIO через пакет python flask-socketio. Я настроил свой сервер так:

файл ./run.py

from my_project import app, socketio

if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0', debug=True)

файл ./my_project/__init__.py

from flask import Flask
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'MY SECRET KEY'
socketio = SocketIO(app)

@socketio.on('connect')
def print_connect():
    print('Client connected')

@socketio.on('disconnect')
def print_disconnect():
    print('Client disconnected')

from my_project import views

Я получал "не определенные" ошибки при попытке использовать его на клиенте, поэтому я открыл socket.io.js файл, полученный Chrome с сервера, только для того, чтобы быть удивленным следующим содержанием (полностью):

�0{"pingTimeout":60000,"sid":"3d6073ff436c49b1aa06090dbb001ceb","upgrades":[],"pingInterval":25000}�40

Чтобы перепроверить, что это не имеет никакого отношения к моему приложению, я извлек файл через curl с помощью команды curl 127.0.0.1:5000/socket.io/socket.io.js который вернул точно такую ​​же искаженную строку.

Я не использую Express каким-либо образом (насколько я знаю), поэтому большинство других вопросов о поиске клиентского файла socket.io, похоже, не применимы. Кроме того, я не получаю 404 с сервера, я получаю 200 и какие-то данные.

Что я могу сделать, чтобы выяснить, почему мой сервер обслуживает явно поврежденный файл socket.io?

1 ответ

Клиент JavaScript Socket.IO должен обслуживаться как обычный статический файл. Не уверен, почему вы ожидали /socket.io/socket.io.js путь будет обслуживать клиента, это не то, как он работает, и на самом деле сервер не имеет ничего общего с клиентом JS.

Так что вам нужно изменить URL, который вы используете в <script> тег, чтобы указать на фактическую клиентскую библиотеку. Например, вы можете загрузить клиента из CDN по адресу https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.jsили, если хотите, загрузите этот файл, поместите его в статическую папку приложения и затем загрузите его с url_for('static', filename='socket.io.js'),

Другие вопросы по тегам