Skip to content

Instantly share code, notes, and snippets.

@efazati
Last active August 29, 2015 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save efazati/0588802a042dfc9ed2a7 to your computer and use it in GitHub Desktop.
Save efazati/0588802a042dfc9ed2a7 to your computer and use it in GitHub Desktop.
ThreadedTCPRequestHandler.py
class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
logger.info({'module': 'server', 'msg': 'Client connected %s' % self.client_address[0]})
cur_thread = threading.current_thread()
data = self.request.recv(1024) # clip input at 1Kb
try:
msg_analyser(data)
response = "{}: {}".format(cur_thread.name, data)
except:
response = "Bad request"
logger.exception({'module': 'server', 'msg': 'Problem handling request %s' % self.client_address[0]})
self.request.sendall(response)
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
logger.info({'module': 'server', 'msg': 'Listening'})
# Ctrl-C will cleanly kill all spawned threads
daemon_threads = True
# much faster rebinding
allow_reuse_address = True
def __init__(self, server_address, RequestHandlerClass):
SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass)
if __name__ == "__main__":
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
server_thread = threading.Thread(target=server.serve_forever)
ip, port = server.server_address
logger.info({'module': 'server', 'msg': 'Listening On %s:%s' % (ip, port)})
# terminate with Ctrl-C
try:
server_thread.start()
except KeyboardInterrupt:
sys.exit(0)
printer_init()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment