gpt4 book ai didi

python - 如何将我的 Rest Api 服务器与我的 Web 套接字服务器通信

转载 作者:太空狗 更新时间:2023-10-29 19:27:07 27 4
gpt4 key购买 nike

我的问题已部分解决,但不是我认为的最佳方式。我有一个 REST API 服务器,它有一个只执行批处理的方法 POST。该方法立即返回 200(没有任何正文),批处理过程继续在服务器中执行其任务。这个批处理有一个日志文件,我通常通过 tail -f mylogfile.log 在网上看到它。我现在想要的是使用 websocket 服务器将 tail 进程的输出发送到网页。 websocket 服务器的代码如下所示:

import os
import asyncio
import websockets
import subprocess

from frontserv.start_server import WEBSOCKET_INTERCHANGE_FILE


async def main(websocket, path):
print("-> STARTING")
exists = os.path.isfile(WEBSOCKET_INTERCHANGE_FILE)
if not exists:
f = open(WEBSOCKET_INTERCHANGE_FILE, "w+")
f.close()

exe = ["tail", "-f", WEBSOCKET_INTERCHANGE_FILE]
message = ""
p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=None)
while True:
retcode = p.poll()
print(message)
message = message + p.stdout.readline().decode("utf-8") + "<br>"
await websocket.send(message)
await asyncio.sleep(0.1)


start_server = websockets.serve(main, '127.0.0.1', 5678)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

我可以访问批处理代码,我认为有更好的方法来解决这个问题。如果我可以向 websocket 服务器发送消息以向浏览器发送消息而不是记录到文件,我认为这将是一个更好的实现。

最好的问候!

最佳答案

如果您只想通过 websockets 将进程的输出发送到客户端,我建议您查看 websocketd

你只需告诉它一个要监听的端口和一个要运行的命令

$ websocketd --port=8080 my-program

当客户端连接并为他们提供输出时,它将运行命令。

关于python - 如何将我的 Rest Api 服务器与我的 Web 套接字服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54171572/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com