我正在使用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>
感谢阅读。