如何与我的Web Socket服务器通信我的Rest Api服务器

nod*_*ata 10 python rest websocket

这是我的问题,部分解决,但不是我认为最好的方式.我有一个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()
Run Code Online (Sandbox Code Playgroud)

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

最好的祝福!

Pet*_*son 3

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

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

$ websocketd --port=8080 my-program
Run Code Online (Sandbox Code Playgroud)

当客户端连接时它将运行命令并向其提供输出。