这是我的问题,部分解决了但我认为解决方式不够好。我有一个REST API服务器,有一个只执行批处理的POST方法。该方法立即返回200(没有任何内容),并且批处理过程在服务器上继续执行其任务。此批处理过程有一个日志文件,我通常使用 tail -f mylogfile.log
在线查看。现在我想使用websocket服务器将尾部进程的输出发送到网页。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服务器,然后将消息分派到浏览器,而不是记录到文件中,我认为这将是一种更好的实现方式。
最好的问候!