栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Flask

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Flask

首先,你要尝试从套接字上下文外部发出一个带有

socket.io
的事件。

当一个函数用

@socketio.on
装饰器包装时,它变成一个
Event-Handlers
。在服务器端触发事件时,它将搜索正确的处理程序以处理该事件,并将上下文初始化为发出该事件的特定客户端。

如果不初始化此上下文,则你

socketio.emit('output', str(json), namespace='/chat')
将无能为力,因为服务器不知道应向谁发回响应。

无论如何,有一个小技巧可以手动将事件发送给特定的客户端(即使你不在上下文中)。每次打开套接字时,服务器会将其分配给一个与套接字ID(sid)同名的“私有”房间。因此,为了从客户端上下文向外部客户端发送消息,你可以创建已连接客户端ID的列表,并使用

room=<id>
参数调用发出函数。

例如:

web_app.py:

...from flask import Flask, requestclients = []@socketio.on('connect')def handle_connect():    print('Client connected')    clients.append(request.sid)@socketio.on('disconnect')def handle_disconnect():    print('Client disconnected')    clients.remove(request.sid)def send_message(client_id, data):    socketio.emit('output', data, room=client_id)    print('sending message "{}" to client "{}".'.format(data, client_id))...

然后,你可能会使用它,如下所示:

main.py:

import web_appimport threadingimport timedef main():    webapp_thread = threading.Thread(target=run_web_app)    webapp_thread.start()    while not web_app.clients:        print "waiting for client to connect"        time.sleep(1)    print "Connected..."    time.sleep(3)    print "Trying to print dummy message..."    web_app.send_message(web_app.clients[0], "Dummy")...

但是,即使你尝试执行此操作,也不会起作用(这使我们犯了第二个错误)。

其次,你将eventlet与常规Python线程混合使用,这不是一个好主意。eventlet使用的绿色线程不适用于常规线程。相反,你应该使用绿色线程来满足所有线程需求。

我在互联网上找到的一种选择是猴子修补Python标准库,以便将线程,套接字等替换为对eventlet友好的版本。你可以在main.py脚本的最顶部执行此操作:

import eventleteventlet.monkey_patch()

之后,它应该可以正常工作(我自己尝试了)。让我知道你是否还有其他问题…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374852.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号