我正在尝试通过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文件?
答案 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')
从那里加载。