Flask-SocketIO' Connect'打回来

时间:2016-12-27 09:13:40

标签: python flask flask-socketio

我尝试在connect操作上访问Flask-SocketIO连接上从客户端(iOS; Swift)传递到服务器的变量。让我解释。当你想做一个随机动作时,你在服务器上有这样的东西,其中包括一个回调(参见下面代码中的data):

@socketio.on('custom action', namespace = '/mynamespace')
def handle_custom_action(data):
    print data

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

@socketio.on('connect', namespace = '/mynamespace')
def handle_connection(data):
    print data # nothing gets printed

我深入研究了代码并发现了这一点。 on函数的定义是:

def on(self, message, namespace=None):

然后在那个函数中(我省略了一些代码来达到目的):

if message == 'connect':
    ret = handler()
else:
    ret = handler(*args)

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

谢谢!

更新: 我确实找到了一种访问连接参数的方法,但它看起来并不像“正确的”#39;办法。我正在使用全局request并拆分请求中出现的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添加了event,它将字典与messageargs的密钥连接起来,args内是QUERY_STRING,然后我将其拆分为一个字典。这样可以正常工作,但它没有必要回答原来的问题,为什么没有回调?

以下是传递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])

0 个答案:

没有答案