2017-11-04 6 views
0

私はpython flask-socketioパッケージを通じてSocketIOを使用するアプリケーションを作成しようとしています。私のような私のサーバーを設定している:破損したsocket.io.jsファイルを扱うFlask開発サーバー

ファイルを./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 

を、私は、クライアント上でそれを使用しようとすると、「定義されていません」エラーが発生しているので、私ましたChromeがサーバーから取得したファイルsocket.io.jsを開きましたが、次の内容(その全体)に驚くことがあります:

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

私のアプリとは何の関係もないことを再確認するには、まったく同じ文字化けした文字列を返したコマンドcurl 127.0.0.1:5000/socket.io/socket.io.jsでcurlでファイルを取得しました。

私は(私が知る限り)どのような方法でもExpressを使用していないので、クライアントsocket.ioファイルのソースに関するその他の質問のほとんどは適用されないようです。さらに、私はサーバーから404を取得していない、私はいくつかの種類ののデータを取得しています。

私のサーバーが明らかに破損したsocket.ioファイルを処理している理由をトラブルシューティングするにはどうすればよいですか?

答えて

2

Socket.IO JavaScriptクライアントは、通常の静的ファイルとして提供する必要があります。なぜ/socket.io/socket.io.jsのパスがクライアントに提供されるのか、それはどのように動作するのか、実際にはJSクライアントとはまったく関係がありません。

したがって、実際のクライアントライブラリを指すように<script>タグで使用するURLを変更する必要があります。たとえば、クライアントをCDNからhttps://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.jsにロードすることもできますし、必要に応じてこのファイルをダウンロードしてアプリケーションの静的フォルダに入れてからurl_for('static', filename='socket.io.js')でロードすることもできます。

+0

ここで問題がどこにあるか確認します。私は正式なSocketIO [get started](https://socket.io/get-started/chat/)のdocsに従っています。ここでは、クライアント上でその魔法のパス文字列を使用すると言います。 ](https://stackoverflow.com/questions/26480991/how-nodejs-and-socket-io-serve-socket-io-js?rq=1))。マジックパスは公式のサーバーサイドのnode.jsパッケージにのみ存在し、Pythonバインディングには存在しないということは、今まで私には起こりませんでした。私はインストールで何かが壊れていることを心配していました。でも、私が404を手に入れただけではないということは、私にとっては奇妙なことです。 –

+0

はい、Pythonサーバーは実際にはバインディングではなく、Node.js公式実装とコードを共有しない完全なサーバーです。私はURLの解析を改善してこのケースの404を返すことができると思うが、 '/ socket.io /'で始まるものはサービスのポーリング/ websocketエンドポイントとみなされる。 – Miguel

関連する問題