我正在嘗試編寫一個服務器端事件服務器,我可以使用telnet連接到該服務器,並將telnet內容推送到瀏覽器。使用Python和asyncio的想法是使用盡可能小的CPU,因爲它將在Raspberry Pi上運行。Python - asyncio協議/服務器之間的通信
到目前爲止,我有以下使用在這裏找到的庫: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())
非常感謝你解釋如何和爲什麼,非常非常有用。看起來我還有很多東西需要學習。 我得到你的示例代碼運行,它正在做我想要/需要的,和非常低的CPU。再次感謝 – 2014-09-02 15:25:43