【问题标题】:Custom handshake data with Flask-SocketIO使用 Flask-SocketIO 自定义握手数据
【发布时间】:2016-08-20 07:42:33
【问题描述】:

我有一个使用 Flask 的 Python 服务器,它有一个使用 Flask-SocketIO 的 websocket 连接。有一个类似的问题: Send custom data along with handshakeData in socket.io? 这个想法是做同样的事情,但不是使用 Node,而是使用 Flask。我希望客户端在连接事件中发送一些数据,例如:

var socket = io("http://127.0.0.1:3000/", { query: "foo=bar" });

我无法获取该自定义数据,并且由于客户端的框架,我无法依赖 cookie。一个可行的解决方案是像往常一样拥有连接事件,然后在自定义事件中将该信息作为有效负载获取。但我们想要的是只需要做一个连接事件。谢谢!

【问题讨论】:

  • 您是否尝试在您的连接处理程序中访问request.args?我认为这应该给你你的查询字符串参数。

标签: python sockets flask flask-socketio


【解决方案1】:

正如米格尔在他的评论中建议的那样,你可以简单地做

from flask import Flask
from flask import request

app = Flask(__name__)
socketio = SocketIO(app)

@socketio.on('connect')
def connect():
    foo = request.args.get('foo')
    # foo will be 'bar' when a client connects

socketio.run(app)

在服务器端。

【讨论】:

    【解决方案2】:

    全局连接方法在服务器端被调用。但不是我针对特定命名空间的连接方法。命名空间是否支持查询参数?

    客户代码

    const socket = io.connect('http://127.0.0.1:5000/ds', { query: {name: "Test"} });
    

    服务器代码

    @socketio.on('connect', namespace='/ds')
    def test_connect():
        foo = request.args.get('foo')
        print("CONNECT DS")
    

    【讨论】:

    • 这样做的危险是查询变量可能被服务器缓存,因此您不想在 URL 中发送敏感数据
    【解决方案3】:

    截至 2021 年的这个时候,您可以使用 python-socketio 客户端发送身份验证数据

    sio.connect('http://localhost:6000/',auth={"authToken":"some auth token"})

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 2012-11-24
      相关资源
      最近更新 更多