【发布时间】:2019-09-28 11:23:04
【问题描述】:
几个月来,我已经在 Python 3 中使用了完美的 Flask-SocketIO 库。直到最后几天,一切都按预期进行。
一切正常,如果连接到 websocket 服务器的命名空间保持默认 /socket.io。但是,如果我尝试更改命名空间以连接到 python flask-socketio 后端,我现在会遇到错误。
我的app.py:
from flask import Flask, session, request, render_template, copy_current_request_context
from flask_cors import CORS, cross_origin
import flask_socketio as socketio
import ujson
async_mode = 'threading'
namespace = '/mynamespace'
app = Flask(__name__)
CORS(app)
app.config['SECRET_KEY'] = 'secret!'
sio = socketio.SocketIO(app, async_mode=async_mode)
@sio.on('connect', namespace=namespace)
def connect():
logging.info('Connected')
@sio.on('disconnect', namespace=namespace)
def disconnect():
logging.info('Disconnected')
@app.route("/home/index")
def home():
return render_template('index.html',
async_mode=sio.async_mode)
我正在使用./main.py 运行服务器,main.py 包含:
from app import app, sio
if __name__ == "__main__":
sio.run(app, debug=False)
我的template/index.html 包含大量代码js,但我认为最有价值的是我从cdn 加载socketio:
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.5/socket.io.min.js"></script>
...我使用自定义命名空间路径连接,如文档中所示:
namespace = '/mynamespace/socket.io';
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port,
{path: namespace});
socket.on('connect', function() {
socket.emit('Connected to server');
})
据我了解,默认情况下,socketio 库尝试连接到后端,并向命名空间发出 connect 消息。在“/home/index”路由上加载“index.html”模板期间,将错误记录到控制台:
Flask 服务器也给出了 404 错误:
我的最佳猜测:目前看起来客户端 JS 库或 chrome 浏览器本身发生了一些变化(几天前我更新了 Chrome)。
也许我只是理解错了一个小细节。非常感谢您对这个问题的帮助。
堆栈版本:
- Python 3.7.2,
- 烧瓶 1.0.2,
- Flask-SocketIO 3.3.1,
- socketio.min.js 1.3.5,
- 谷歌浏览器 77.0.3865.90(64 位)
【问题讨论】:
标签: python python-3.x flask socket.io flask-socketio