我正在尝试编写一个Server Side Events服务器,我可以通过telnet连接并将telnet内容推送到浏览器。使用Python和asyncio的想法是尽可能少地使用CPU,因为它将在树莓派上运行。
到目前为止,我已经有了以下代码,它使用了在此处找到的库:https://pypi.python.org/pypi/asyncio-sse/0.1,该库使用了asyncio。
我还复制了一个使用asyncio的telnet服务器。
两者分别工作,但我不知道如何将它们绑定在一起。据我所知,我需要从
有人能帮忙或指点吗?
到目前为止,我已经有了以下代码,它使用了在此处找到的库:https://pypi.python.org/pypi/asyncio-sse/0.1,该库使用了asyncio。
我还复制了一个使用asyncio的telnet服务器。
两者分别工作,但我不知道如何将它们绑定在一起。据我所知,我需要从
Telnet.data_received
内部调用SSEHandler
类中的send()
,但我不知道如何访问它。这两个“服务器”都需要在循环中运行以接受新连接或推送数据。有人能帮忙或指点吗?
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())