Flask开发服务器提供损坏的socket.io.js文件

时间:2017-11-04 01:46:39

标签: python-3.x flask socket.io flask-socketio

我正在尝试通过python flask-socketio包创建一个使用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

尝试在客户端上使用时,我收到“未定义”错误,因此我打开了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,我得到了某种类型的200和数据

我该怎么做才能解决为什么我的服务器提供明显损坏的socket.io文件?

1 个答案:

答案 0 :(得分:2)

Socket.IO JavaScript客户端需要作为常规静态文件提供。不确定为什么你期望/socket.io/socket.io.js路径服务于客户端,这不是它的工作方式,事实上,服务器与JS客户端实际上没有任何关系。

因此,您需要更改在<script>标记中使用的URL以指向实际的客户端库。例如,您可以从https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js的CDN加载客户端,或者如果您愿意,可以下载此文件,将其放在应用程序的静态文件夹中,然后使用url_for('static', filename='socket.io.js')从那里加载。