Advertisement
Woobinda

asyncio Server

Aug 19th, 2017
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.53 KB | None | 0 0
  1. # asyncio echo server
  2.  
  3. import asyncio
  4. import logging
  5. import sys
  6.  
  7.  
  8. class EchoServer(asyncio.Protocol):
  9.  
  10.     def connection_made(self, transport):
  11.         self.transport = transport
  12.         self.address = transport.get_extra_info('peername')
  13.         self.log = logging.getLogger(
  14.             'EchoServer_{}_{}'.format(*self.address)
  15.         )
  16.         self.log.debug('connection accepted')
  17.  
  18.     def data_received(self, data):
  19.         self.log.debug('received {!r}'.format(data))
  20.         self.transport.write(data)
  21.         self.log.debug('sent {!r}'.format(data))
  22.  
  23.     def eof_received(self):
  24.         self.log.debug('received EOF')
  25.         if self.transport.can_write_eof():
  26.             self.transport.write_eof()
  27.  
  28.     def connection_lost(self, error):
  29.         if error:
  30.             self.log.error('ERROR: {}'.format(error))
  31.         else:
  32.             self.log.debug('closing')
  33.         super().connection_lost(error)
  34.  
  35.  
  36. SERVER_ADDRESS = ('localhost', 10000)
  37.  
  38. logging.basicConfig(
  39.     level=logging.DEBUG,
  40.     format='%(name)s: %(message)s',
  41.     stream=sys.stderr,
  42. )
  43. log = logging.getLogger('main')
  44.  
  45. event_loop = asyncio.get_event_loop()
  46. factory = event_loop.create_server(EchoServer, *SERVER_ADDRESS)
  47. server = event_loop.run_until_complete(factory)
  48. log.debug('starting up on {} port {}'.format(*SERVER_ADDRESS))
  49.  
  50. try:
  51.     event_loop.run_forever()
  52. finally:
  53.     log.debug('closing server')
  54.     server.close()
  55.     event_loop.run_until_complete(server.wait_closed())
  56.     log.debug('closing event loop')
  57.     event_loop.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement