Сервер разработки 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')
,