我正在尝试编写一个服务器端事件服务器,我可以使用 telnet 连接它并将 telnet 内容推送到浏览器。使用 Python 和 asyncio 背后的想法是使用尽可能少的 CPU,因为这将在 Raspberry Pi 上运行。
到目前为止,我有以下使用此处找到的库:https : //pypi.python.org/pypi/asyncio-sse/0.1,它使用 asyncio。
我还复制了一个也使用 asyncio 的 telnet 服务器。
两者分开工作,但我不知道如何将两者结合在一起。据我了解,我需要从里面调用类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())