Skip to content

Instantly share code, notes, and snippets.

@bdarnell
Created January 27, 2014 01:24
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bdarnell/8641880 to your computer and use it in GitHub Desktop.
Save bdarnell/8641880 to your computer and use it in GitHub Desktop.
Unix socket HTTP client via custom resolver
import socket
from tornado.concurrent import TracebackFuture, return_future
from tornado import gen
from tornado.httpclient import AsyncHTTPClient
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.netutil import bind_unix_socket, Resolver
from tornado.web import RequestHandler, Application
class HelloHandler(RequestHandler):
def get(self):
self.write('hello')
SOCKPATH = '/tmp/test.sock'
class UnixResolver(Resolver):
def initialize(self, resolver):
self.resolver = resolver
def close(self):
self.resolver.close()
@gen.coroutine
def resolve(self, host, port, *args, **kwargs):
if host == 'unixsocket':
raise gen.Return([(socket.AF_UNIX, SOCKPATH)])
result = yield self.resolver.resolve(host, port, *args, **kwargs)
raise gen.Return(result)
@gen.coroutine
def main():
app = Application([('/', HelloHandler)])
server = HTTPServer(app)
server.add_socket(bind_unix_socket(SOCKPATH))
resolver = UnixResolver(resolver=Resolver())
AsyncHTTPClient.configure(None, resolver=resolver)
response = yield AsyncHTTPClient().fetch('http://unixsocket/')
print response.body
IOLoop.current().run_sync(main)
@beef9999
Copy link

AsyncHTTPClient.configure(None, resolver=resolver), is this a global configure?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment