求教python局域网内通信的实现
就是内网用户的py程序给服务器正在运行的py程序发信息,然后服务器根据信息处理过后把结果传回用户的py程序。还有个排队问题,服务器那程序一次只能处理一个信息。其中还有个问题 要服务器知道不同用户的 开始 结束 等待状态 ,以及让用户知道自己的请求是否在等待还是正在处理或结束,这个该怎么获取呢?
完全不知道怎么实现,求指导。 用flask整一套rest api试试?
状态可以存后端数据库里 像楼上说的上个rest api
调用方把信息放到里请求体里,post /submit_job,服务器把请求加入内存队列,返回一个任务ID(可以简单递增,也可以UUID),后续调用方想查询任务状态,可以定时带上任务ID get /status,服务端根据任务ID返回结果(已完成)或者队列顺序(排队中)
如果想让把完成状态直接push到调用方,可以在请求体里包含个回调URL(Web hook),服务端完成任务后请求这个回调URL通知调用方
或者直接用消息队列,调用方作为producer,服务端作为consumer,走消息队列自己的机制查询排队状态(例如是否ACK) 本帖最后由 chachi 于 2022-9-23 22:31 编辑
用mq不是正好,两个队列,互为生产者和消费者
一个作业队列
一个结果队列
chachi 发表于 2022-9-23 22:28
用mq不是正好,两个队列,互为生产者和消费者
一个作业队列
一个结果队列
mq是啥?求个全称
—— 来自 Xiaomi M2011K2C, Android 12上的 S1Next-鹅版 v2.5.4 gx19860411 发表于 2022-9-23 22:43
mq是啥?求个全称
—— 来自 Xiaomi M2011K2C, Android 12上的 S1Next-鹅版 v2.5.4
message queue,消息队列
你这个场景比较简单的rabbitmq可能都够了 消息队列这种架构一下子就多了至少一个服务
消费者如果还要单独启动一个进程,又多了一个要维护的地方
感觉对 LZ 这样的初学者不算太友好
想问下客户端对用户体验要求高吗?
比如说,下面这种最粗糙的实现,客户端能接受吗?
如果能,那么就先从这种简单的做法上手:
服务端用 HTTP 框架(比如 Flask),先不需具备并发处理能力
每次有客户端的请求进来,就去做 LZ 所说的“一次只能处理一个信息”,等处理完成之后再向客户端返回响应
处理过程中,有新的请求进来,会因为无法建立 TCP 连接而超时
这样如果能满足,那可以先上线
等积累了一点基础
再开始研究如何在服务器端保存 / 修改任务执行的状态
这一步也可以先用个 SQLite 数据库凑合着
没必要一上来就搞消息队列 这需求socket就可以实现了 回传时间也是个问题,超过1秒的任务还是用ws吧
—— 来自 S1Fun 本帖最后由 chachi 于 2022-9-24 02:19 编辑
现成的MQ不去用,自己去造一个类似MQ的功能。。
注意需求是有服务端一次只能处理一个请求的要求,多余的请求必须服务端要有队列来维护
而且也不知道服务器端多久执行完请求,你一个socket上去还要考虑超时重连断线结果ACK等等
初期选型不选好必然导致后期推倒重做
我不是码农这种我会用Redis当消息队列,生产者把结果lpush进去,消费者定时去rpop
—— 来自 samsung SM-G9910, Android 12上的 S1Next-鹅版 v2.5.4 import redis json
conn_pool = redis.ConnectionPool(host='x.x.x.x', port=6379)
# 队列名称
q_name="xxx"
re_queue = redis.Redis(connection_pool=conn_pool)
for data in datas:
#从左往右推入数据
re_queue.lpush(q_name,json.dumps(data)
消费者一个用rpop从右往左从队列里拿数据,
—— 来自 samsung SM-G9910, Android 12上的 S1Next-鹅版 v2.5.4
页:
[1]