使httplib连接永久存在

时间:2018-02-25 11:51:21

标签: python python-2.7 keep-alive httplib

我正在使用httplib库(python 2.7),正如您可能知道的那样,每次建立新连接时都需要进行TCP握手,这可能需要几秒钟,我一直在尝试否定一段相当长的时间。我对我的请求使用Keep-Alive标头,但我正在使用的REST服务器有一个非常短的超时(<30秒),所以我需要刷新当前连接,或者做一个新的,因此是一个新的等待(在这种情况下是不可能的)。

在过去,作为一种解决方法,我使用过(确实是古怪的),如下所示:

#script 1
import zmq

#Set PUSH socket
context = zmq.Context()
ventilator_send = context.socket(zmq.PUSH)
ventilator_send.bind("tcp://127.0.0.1:5557")

def SOCKET_SENDS(INFO):

        try:
            ventilator_send.send(INFO,zmq.NOBLOCK)
        except Exception, e:
            print "Socket failure - check client", e

#send content 
msg     = json.dumps({'MKT':{'A':123,'B':456}})
SOCKET_SENDS(msg)

然后我将请求发送到以下内容:

#script 2
context = zmq.Context()
work_receiver = context.socket(zmq.PULL)
work_receiver.connect("tcp://127.0.0.1:5557")
poller = zmq.Poller()
poller.register(work_receiver, zmq.POLLIN)

#make initial handshake
conn = httplib.HTTPSConnection('site')

while True:
        socks = dict(poller.poll(25000))
        if socks:
                if socks.get(work_receiver) == zmq.POLLIN:
                        RESP = json.loads(work_receiver.recv(zmq.NOBLOCK))

                        if  RESP.has_key('MKT'):
                                conn.request(GET, POST, PUT..., params, {'Connection' :'Keep-Alive'})
                                write_pickle(conn.getresponse())

                        if  RESP.has_key('LMT'):
                                conn.request(GET, POST, PUT..., params, {'Connection' :'Keep-Alive'})
                                write_pickle(conn.getresponse())

                        if  RESP.has_key('TPP'):
                                conn.request(GET, POST, PUT..., params, {'Connection' :'Keep-Alive'})
                                write_pickle(conn.getresponse())
        ...


        else:
                conn.request(GET, POST, PUT..., params, {'Connection' :'Keep-Alive'})
                consume_scrap_response = conn.getresponse())

所以,所有这一切都是为了保持HTTP连接的持久性,这有点过分了吗? (并且说它容易出错是一种轻描淡写的)有没有人有一个(简单的?)方法,我可以保持conn存活并从其他线程/脚本调用它? / p>

感谢阅读。

0 个答案:

没有答案