Ich versuche, eine App zu erstellen, die SocketIO über das Python-Flask-socketio-Paket verwendet. Ich habe meinen Server als solche eingerichtet:Flask-Entwicklungsserver serviert beschädigte socket.io.js Datei
Datei ./run.py
from my_project import app, socketio
if __name__ == '__main__':
socketio.run(app, host='0.0.0.0', debug=True)
Datei ./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
Ich war immer "nicht definiert" Fehler bei dem Versuch, es auf dem Client zu verwenden, so dass ich öffnete die socket.io.js
Datei, die Chrome vom Server abgerufen hatte, nur um durch den folgenden Inhalt (in ihrer Gesamtheit) überrascht zu werden:
�0{"pingTimeout":60000,"sid":"3d6073ff436c49b1aa06090dbb001ceb","upgrades":[],"pingInterval":25000}�40
Um zu überprüfen, dass es nichts mit meiner App zu tun hatte, holte ich die Datei durch curl mit dem Befehl curl 127.0.0.1:5000/socket.io/socket.io.js
zurück, der genau die gleiche verstümmelte Zeichenfolge zurückgab.
Ich verwende Express in keiner Weise (soweit ich weiß), so dass die meisten anderen Fragen über die Beschaffung der Client-socket.io-Datei nicht zutreffen scheinen. Außerdem bekomme ich keine 404 vom Server, ich bekomme eine 200 und Daten irgendeiner Art.
Was kann ich tun, um zu beheben, warum mein Server eine offensichtlich beschädigte socket.io-Datei bereitstellt?
Ich sehe, wo das Problem jetzt ist. Ich habe die offizielle Dokumentation von SocketIO [get started] (https://socket.io/get-started/chat/) gelesen, in der es heißt, diese magische Pfadzeichenfolge auf dem Client zu verwenden (auch in [dieser SO-Frage erläutert] ] (https://stackoverflow.com/questions/26480991/how-nodejs-and-socket-io-serve-socket-io-js?rq=1)). Es ist mir bis jetzt noch nicht einmal in den Sinn gekommen, dass der magische Pfad nur für das offizielle serverseitige Paket node.js und nicht für Ihre Python-Bindungen existieren könnte. Ich habe mir Sorgen gemacht, dass etwas mit meiner Installation korrupt ist. Mir kommt immer noch komisch vor, dass ich nicht nur einen 404 bekommen habe. –
Ja, der Python-Server ist eigentlich keine Bindungen, es ist ein voller Server, der keinen Code mit der offiziellen Node.js-Implementierung teilt. Ich denke, ich kann das Parsing der URL verbessern und eine 404 für diesen Fall zurückgeben, aber im Moment wird alles, was mit '/ socket.io /' beginnt, als der Abfragungs-/Websocket-Endpunkt für den Dienst angesehen. – Miguel