Skip to content

Instantly share code, notes, and snippets.

@doron2402
Created April 28, 2019 01:06
Show Gist options
  • Save doron2402/c20553cd2a84ec84374b3298f415e282 to your computer and use it in GitHub Desktop.
Save doron2402/c20553cd2a84ec84374b3298f415e282 to your computer and use it in GitHub Desktop.
Python 3.7 nsq + web server
import asyncio
from aiohttp import web
from asyncnsq import create_reader
from asyncnsq.utils import get_logger
# Handle request
async def handle_echo(reader, writer):
data = await reader.read(100)
message = data.decode()
addr = writer.get_extra_info('peername')
print(f"Received {message!r} from {addr!r}")
print(f"Send: {message!r}")
writer.write(data)
await writer.drain()
print("Close the connection")
writer.close()
async def nsq_listener():
try:
print(f"Connecting to NSQ")
reader = await create_reader(
nsqd_tcp_addresses=['127.0.0.1:4150'],
max_in_flight=200)
await reader.subscribe('incoming_topic', 'nsq')
async for message in reader.messages():
print(message.body)
await message.fin()
except Exception as tmp:
self.logger.exception(tmp)
async def main():
server1 = await asyncio.start_server(
handle_echo, '127.0.0.1', 8888)
addr1 = server1.sockets[0].getsockname()
print(f'Serving 1 on {addr1}')
server2 = await asyncio.start_server(
handle_echo, '127.0.0.1', 8889)
addr2 = server2.sockets[0].getsockname()
print(f'Serving 2 on {addr2}')
async with server1, server2:
await asyncio.gather(
server1.serve_forever(),
server2.serve_forever(),
nsq_listener()
)
asyncio.run(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment