Так что технически я уже создал сокет прослушивания TCP и все работает нормально.
Он просто получает сообщение tcp json и выкладывает его.
class TCPListener(Base):
def __init__(self,
address,
port,
buffer,
backlog,
**kwargs):
self.tcp_address = address
self.tcp_port = port
self.tcp_buffer = buffer
self.tcp_asyncio_backlog = backlog
self.queue = queue.Queue()
def __await__(self):
self._server = yield from asyncio.start_server(
self.__on_message,
host=self.tcp_address,
port=self.tcp_port,
backlog=self.tcp_asyncio_backlog
)
return self
async def __on_message(self, reader, writer):
message = await reader.read(self.tcp_buffer)
try:
json_encoded = json.loads(message.decode('UTF-8').strip())
self.queue.put(json_encoded)
writer.close()
def start(self):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
asyncio.ensure_future(self, loop=loop)
def receive(self):
while self.queue.empty():
sleep_random = random.randint(0, 1000)
time.sleep(sleep_random / 1000.0)
if not self.queue.empty():
return self.queue.get(block=False)
return '', ''
Теперь я пытаюсь заставить этот код работать для прослушивателя TCP и UDP. Интересно, какую функцию я могу сохранить и как я делю их между слушателем, не знаю, как с этим справиться! Если я не ошибаюсь, я должен использовать «create_datagram_endpoint», но все еще не знаю, как склеить его с этим классом и функциями.