HTTP over Asynchronous AF_UNIX Socket in python

Norah Jones nh.jones01 at gmail.com
Mon Jan 26 14:32:22 CET 2015


Hi, 

The problem description:

There are set of processes running on my system say `process_set_1`. Build a process agent which runs an `asynchronous` socket listening to incoming requests from process_set_1. Each process sends an `id`. The agent stores these ids in a dictionary and sends response that ur id has been accepted. Now agent process receives some data from another process (which is some sort of sister process for the agent). This data contains id along with a command which is to be sent by the agent to the process_set_1 through HTTP client over `AF_UNIX` socket, since each process in process_set_1 has a HTTP listening CLI. The process agent sends an HTTP request by recognizing id stored in dictionary to the process_set_1. A service running in the process_set_1 routes this HTTP command to the respective process.

Now my problem is the HTTP request which to be sent must go through AF_UNIX socket. I got this solution.

    class UnixStreamHTTPConnection(httplib.HTTPConnection):
    
        def __init__(self, path, host='localhost/rg_cli',port=None, strict=None,
                     timeout=None):
            httplib.HTTPConnection.__init__(self, host, port=port, strict=strict,
                                            timeout=timeout)
            self.path=path
    
        def connect(self):
            self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
            self.sock.connect(self.path)

But this cannot work since normal socket will not work and thus i thought of `asyncore` module in python. To use asyncore module again i will have to subclass asyncore.dispatcher. This class also contains connect() method.

Another problem is I don't know how asyncore module works and thus not able to find a way to mix the work of 1) listening forever, accept the connection, store id and the sock_fd. 
2) accept data from the process' agent sister process, retrieve the sock_fd by matching the id in the dictionary and send it through the AF_UNIX socket.

Please help since i have already spent 2 days digging it out. Sorry if could explain my problem very well.

Thanks,
Norah Jones





More information about the Python-list mailing list