Python 烧瓶插座';连接';回拨

Python 烧瓶插座';连接';回拨,python,flask,flask-socketio,Python,Flask,Flask Socketio,我试图通过connect操作访问通过Flask SocketIO连接从客户端(iOS;Swift)传递到服务器的变量。让我解释一下。当您想要执行随机操作时,服务器上会有类似的操作,其中包括回调(请参阅下面代码中的数据): 有一些预设操作(如connect),显然connect在调用时没有任何回调,因此客户端无法在connect操作上发送任何数据: @socketio.on('connect', namespace = '/mynamespace') def handle_connection(d

我试图通过
connect
操作访问通过Flask SocketIO连接从客户端(iOS;Swift)传递到服务器的变量。让我解释一下。当您想要执行随机操作时,服务器上会有类似的操作,其中包括回调(请参阅下面代码中的
数据
):

有一些预设操作(如
connect
),显然
connect
在调用时没有任何回调,因此客户端无法在
connect
操作上发送任何数据:

@socketio.on('connect', namespace = '/mynamespace')
def handle_connection(data):
    print data # nothing gets printed
我更深入地研究了代码,发现了这一点。
on
功能的定义是:

def on(self, message, namespace=None):
然后在该函数中(我省略了一点代码来说明问题):

我可能错了,但代码似乎没有显式地返回连接上的任何内容,我不知道为什么?我在node.js中发现了一些证据表明这是可能的(当我找到它们时,我会用适当的链接更新它们),所以我想知道为什么在Flask SocketIO库中这是不可能的,或者我只是误解了我在看什么(如果是,如何获得这些参数)

谢谢


更新: 我确实找到了一种访问连接参数的方法,但它似乎不是“正确”的方法。我正在使用全局
请求
并拆分请求中通过的GET参数/查询字符串:

data = dict(item.split("=") for item in request.event["args"][0]["QUERY_STRING"].split("&"))
或分为两行:

data = request.event["args"][0]["QUERY_STRING"].split("&"))
data = dict(item.split("=") for item in data.split("&"))
Flask SocketIO添加了
事件
,该事件将字典与
消息
参数
键连接起来,在
参数
中是查询字符串,然后将其拆分为字典。这很好,但它不一定回答最初的问题,即为什么没有回调


以下是正在传递的iOS连接参数的示例:

let connectParams = SocketIOClientOption.connectParams(["user_id" : Int(user.userId)!, "connection_id" : self.socketConnectionId])
self.socket = SocketIOClient(socketURL: URL(string: "http://www.myurl.com")!, config: [.nsp("/namespace"), .forceWebsockets(true), .forceNew(true), connectParams])

如何在iOS客户端的连接调用上传递自定义参数?我的理解是connect调用不接受参数。@Miguel我刚才在上面添加了一段代码哦,好的,所以他们通过查询字符串发送参数。您是否尝试过对查询字符串的正常访问
request.args
应具有客户端发送的查询字符串。它将包括标准参数(您可以忽略这些参数,因为它们由Flask SocketIO处理)和客户端在连接URL中发送的任何自定义参数。至少我是这么想的。如果这不起作用,请写一个bug,我会确保它按预期工作。@Miguel我会尝试一下,让你知道我发现了什么。谢谢如何在iOS客户端的连接调用上传递自定义参数?我的理解是connect调用不接受参数。@Miguel我刚才在上面添加了一段代码哦,好的,所以他们通过查询字符串发送参数。您是否尝试过对查询字符串的正常访问
request.args
应具有客户端发送的查询字符串。它将包括标准参数(您可以忽略这些参数,因为它们由Flask SocketIO处理)和客户端在连接URL中发送的任何自定义参数。至少我是这么想的。如果这不起作用,请写一个bug,我会确保它按预期工作。@Miguel我会尝试一下,让你知道我发现了什么。谢谢
data = request.event["args"][0]["QUERY_STRING"].split("&"))
data = dict(item.split("=") for item in data.split("&"))
let connectParams = SocketIOClientOption.connectParams(["user_id" : Int(user.userId)!, "connection_id" : self.socketConnectionId])
self.socket = SocketIOClient(socketURL: URL(string: "http://www.myurl.com")!, config: [.nsp("/namespace"), .forceWebsockets(true), .forceNew(true), connectParams])