Skip to content

Instantly share code, notes, and snippets.

@efazati
Last active September 14, 2024 12:57
Show Gist options
  • Save efazati/0588802a042dfc9ed2a7 to your computer and use it in GitHub Desktop.
Save efazati/0588802a042dfc9ed2a7 to your computer and use it in GitHub Desktop.

Revisions

  1. efazati renamed this gist Mar 7, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. efazati created this gist Mar 7, 2015.
    37 changes: 37 additions & 0 deletions ThreadedTCPRequestHandler
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    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()