使用自定义命名空间的Flask Socket io出现错误

问题描述 投票:0回答:1

我已经在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>

...,并且我使用带有自定义名称空间路径的connect,如docs中的一样:

    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”模板时,将错误记录到控制台:

Error on 'connect' to flask-socketio backend

Flask服务器也给出了404错误:

Flask backend logs

[我的最佳猜测:此刻,客户端JS库或chrome浏览器本身似乎有所更改(几天前,我更新了Chrome)。

也许我只是错误地理解了一个小细节。我真的很感谢您为这个问题提供的帮助。

堆栈版本:

  • Python 3.7.2,
  • 烧瓶1.0.2,
  • Flask-SocketIO 3.3.1,
  • socketio.min.js1.3.5,
  • Google Chrome 77.0.3865.90(64位)
python python-3.x flask socket.io flask-socketio
1个回答
0
投票

您将namespacepath混淆了,这是完全不同的事情。路径是Socket.IO服务器正在侦听的端点URL。命名空间是Socket.IO的协议功能,它允许将多个逻辑连接多路复用为一个物理连接。

© www.soinside.com 2019 - 2024. All rights reserved.