Я пытаюсь создать сервер серверных событий, с которым я могу подключиться к telnet, и содержимое telnet будет перенесено в браузер. Идея использования Python и asyncio заключается в том, чтобы использовать как можно меньше CPU, поскольку это будет работать на малине Pi.Python - Общайтесь между протоколом/сервером asyncio
До сих пор у меня есть следующее, которое использует библиотеку, найденную здесь: https://pypi.python.org/pypi/asyncio-sse/0.1, которая использует asyncio.
И я также скопировал сервер telnet, который также использует asyncio.
Обе работают отдельно, но я понятия не имею, как связать обе вместе. Как я понимаю, мне нужно позвонить send()
в класс SSEHandler
изнутри Telnet.data_received
, но я не знаю, как к нему обращаться. Оба этих «сервера» должны быть запущены в цикле для приема новых соединений или для перемещения данных.
Может ли кто-нибудь помочь или указать мне в другом направлении? Я на том этапе, где больше не знаю, что делать дальше
import asyncio
import sse
# Get an instance of the asyncio event loop
loop = asyncio.get_event_loop()
# Setup SSE address and port
sse_host, sse_port = '192.168.2.25', 8888
class Telnet(asyncio.Protocol):
def connection_made(self, transport):
print("Connection received!");
self.transport = transport
def data_received(self, data):
print(data)
self.transport.write(b'echo:')
self.transport.write(data)
# This is where I want to send data via SSE
# SSEHandler.send(data)
# Things I've tried :(
#loop.call_soon_threadsafe(SSEHandler.handle_request());
#loop.call_soon_threadsafe(sse_server.send("PAH!"));
def connection_lost(self, esc):
print("Connection lost!")
telnet_server.close()
class SSEHandler(sse.Handler):
@asyncio.coroutine
def handle_request(self):
self.send('Working')
# SSE server
sse_server = sse.serve(SSEHandler, sse_host, sse_port)
# Telnet server
telnet_server = loop.run_until_complete(loop.create_server(Telnet, '192.168.2.25', 7777))
#telnet_server.something = sse_server;
loop.run_until_complete(sse_server)
loop.run_until_complete(telnet_server.wait_closed())
Огромное спасибо за объяснение, как И почему, очень очень полезно. У меня есть намного больше, чтобы понять, что это казалось бы. Я получил ваш пример кода и выполнял именно то, что я хотел/нуждался, и очень низкий процессор. еще раз спасибо –