Как связать мой Rest Api Server с моим сервером веб-сокетов - PullRequest
0 голосов
/ 13 января 2019

Вот моя проблема, которая частично решена, но, думаю, не лучшим образом. У меня есть REST API-сервер, который имеет метод POST, который выполняет только пакетный процесс. Метод немедленно возвращает 200 (без какого-либо тела), и пакетный процесс продолжает свою задачу на сервере. У этого пакетного процесса есть файл журнала, который я обычно вижу онлайн с tail -f mylogfile.log. Теперь я хочу использовать сервер веб-сокетов для отправки вывода хвостового процесса на веб-страницу. Код сервера веб-сокетов выглядит следующим образом:

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()

У меня есть доступ к коду пакетного процесса, и я думаю, что есть лучший способ решить эту проблему. Если бы вместо того, чтобы войти в файл, я мог бы отправить сообщение на сервер веб-сокетов, чтобы отправить сообщение в браузер, я думаю, что это было бы лучшей реализацией.

С наилучшими пожеланиями!

1 Ответ

0 голосов
/ 18 января 2019

Если вы просто хотите отправить вывод процесса клиенту через веб-сокеты, я бы посоветовал вам посмотреть websocketd

Вы просто указываете порт для прослушивания и команду для запуска

$ websocketd --port=8080 my-program

И он запустит команду, когда клиент подключится, и предоставит им вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...