2017-11-04 14 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 명령으로 파일을 검색했습니다.

어떤 식 으로든 Express를 사용하고 있지는 않습니다. (알고있는 한 알 수있는대로) 클라이언트 socket.io 파일을 소싱하는 것에 대한 대부분의 다른 질문은 적용되지 않는 것 같습니다. 또한, 서버에서 404를 얻지 못하고 있는데, 어떤 종류의 데이터가 인 200 및 이 표시됩니다.

서버가 명백하게 손상된 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 [시작하기] (https://socket.io/get-started/chat/) 문서를 읽고 있는데, 클라이언트의 마법 경로 문자열을 사용하는 곳이다. ] (https://stackoverflow.com/questions/26480991/how-nodejs-and-socket-io-serve-socket-io-js?rq=1)). 마술 경로가 파이썬 바인딩이 아닌 공식적인 서버 측 node.js 패키지에만 존재할 수있을 때까지는 지금까지 나에게 아무런 변화가 없었다. 나는 설치로 인해 어떤 것이 손상되었다고 걱정했다. 그래도 나는 단지 404를 얻지 않았다라고 나에게 별 났던 것처럼 보인다. –

+0

예, 파이썬 서버는 실제로 바인딩이 아니며 Node.js 공식 구현과 코드를 공유하지 않는 전체 서버입니다. URL 구문 분석을 향상시키고이 경우 404를 반환 할 수 있다고 생각하지만, 현재는/socket.io /로 시작하는 모든 것이 서비스의 폴링/websocket 끝점으로 간주됩니다. – Miguel