handle each request in its own thread