class BaseProxyHandler (CCHandler): """Simply proxies further""" CC_ROLES = ['local', 'remote'] log = skytools.getLogger ('h:BaseProxyHandler') zmq_hwm = 100 zmq_linger = 500 zmq_rcvbuf = 0 # means no change zmq_sndbuf = 0 # means no change zmq_tcp_keepalive = 1 zmq_tcp_keepalive_intvl = 15 zmq_tcp_keepalive_idle = 4*60 zmq_tcp_keepalive_cnt = 4 # 9 on win32 def __init__(self, hname, hcf, ccscript): super(BaseProxyHandler, self).__init__(hname, hcf, ccscript) s = self.make_socket() self.stream = CCStream(s, ccscript.ioloop, qmaxsize = self.zmq_hwm) self.stream.on_recv(self.on_recv) self.startup() self.launch_workers() def startup(self): pass def launch_workers(self): pass def make_socket(self): self.zmq_hwm = self.cf.getint ('zmq_hwm', self.zmq_hwm) self.zmq_linger = self.cf.getint ('zmq_linger', self.zmq_linger) self.zmq_rcvbuf = hsize_to_bytes (self.cf.get ('zmq_rcvbuf', str(self.zmq_rcvbuf))) self.zmq_sndbuf = hsize_to_bytes (self.cf.get ('zmq_sndbuf', str(self.zmq_sndbuf))) self.zmq_tcp_keepalive = self.cf.getint ('zmq_tcp_keepalive', self.zmq_tcp_keepalive) self.zmq_tcp_keepalive_intvl = self.cf.getint ('zmq_tcp_keepalive_intvl', self.zmq_tcp_keepalive_intvl) self.zmq_tcp_keepalive_idle = self.cf.getint ('zmq_tcp_keepalive_idle', self.zmq_tcp_keepalive_idle) self.zmq_tcp_keepalive_cnt = self.cf.getint ('zmq_tcp_keepalive_cnt', self.zmq_tcp_keepalive_cnt) self.remote_url = self.cf.get ('remote-cc') s = self.zctx.socket(zmq.XREQ) try: s.setsockopt (zmq.HWM, self.zmq_hwm) except AttributeError: s.set_hwm (self.zmq_hwm) s.setsockopt (zmq.LINGER, self.zmq_linger) if self.zmq_rcvbuf > 0: s.setsockopt (zmq.RCVBUF, self.zmq_rcvbuf) if self.zmq_sndbuf > 0: s.setsockopt (zmq.SNDBUF, self.zmq_sndbuf) if self.zmq_tcp_keepalive > 0: if getattr(zmq, 'TCP_KEEPALIVE', -1) > 0: s.setsockopt(zmq.TCP_KEEPALIVE, self.zmq_tcp_keepalive) s.setsockopt(zmq.TCP_KEEPALIVE_INTVL, self.zmq_tcp_keepalive_intvl) s.setsockopt(zmq.TCP_KEEPALIVE_IDLE, self.zmq_tcp_keepalive_idle) s.setsockopt(zmq.TCP_KEEPALIVE_CNT, self.zmq_tcp_keepalive_cnt) s.connect (self.remote_url) return s def on_recv(self, zmsg): """Got message from remote CC, send to client.""" try: self.log.trace('') self.stat_inc('count') self.stat_inc('bytes', zmsg_size(zmsg)) self.cclocal.send_multipart(zmsg) except: self.log.exception('crashed, dropping msg') def handle_msg(self, cmsg): """Got message from client, send to remote CC.""" self.log.trace('') self.stream.send_cmsg(cmsg)
class BaseProxyHandler(CCHandler): """Simply proxies further""" CC_ROLES = ['local', 'remote'] log = skytools.getLogger('h:BaseProxyHandler') zmq_hwm = 100 zmq_linger = 500 zmq_rcvbuf = 0 # means no change zmq_sndbuf = 0 # means no change zmq_tcp_keepalive = 1 zmq_tcp_keepalive_intvl = 15 zmq_tcp_keepalive_idle = 4 * 60 zmq_tcp_keepalive_cnt = 4 # 9 on win32 def __init__(self, hname, hcf, ccscript): super(BaseProxyHandler, self).__init__(hname, hcf, ccscript) s = self.make_socket() self.stream = CCStream(s, ccscript.ioloop, qmaxsize=self.zmq_hwm) self.stream.on_recv(self.on_recv) self.startup() self.launch_workers() def startup(self): pass def launch_workers(self): pass def make_socket(self): self.zmq_hwm = self.cf.getint('zmq_hwm', self.zmq_hwm) self.zmq_linger = self.cf.getint('zmq_linger', self.zmq_linger) self.zmq_rcvbuf = hsize_to_bytes( self.cf.get('zmq_rcvbuf', str(self.zmq_rcvbuf))) self.zmq_sndbuf = hsize_to_bytes( self.cf.get('zmq_sndbuf', str(self.zmq_sndbuf))) self.zmq_tcp_keepalive = self.cf.getint('zmq_tcp_keepalive', self.zmq_tcp_keepalive) self.zmq_tcp_keepalive_intvl = self.cf.getint( 'zmq_tcp_keepalive_intvl', self.zmq_tcp_keepalive_intvl) self.zmq_tcp_keepalive_idle = self.cf.getint( 'zmq_tcp_keepalive_idle', self.zmq_tcp_keepalive_idle) self.zmq_tcp_keepalive_cnt = self.cf.getint('zmq_tcp_keepalive_cnt', self.zmq_tcp_keepalive_cnt) self.remote_url = self.cf.get('remote-cc') s = self.zctx.socket(zmq.XREQ) s.setsockopt(zmq.HWM, self.zmq_hwm) s.setsockopt(zmq.LINGER, self.zmq_linger) if self.zmq_rcvbuf > 0: s.setsockopt(zmq.RCVBUF, self.zmq_rcvbuf) if self.zmq_sndbuf > 0: s.setsockopt(zmq.SNDBUF, self.zmq_sndbuf) if self.zmq_tcp_keepalive > 0: if getattr(zmq, 'TCP_KEEPALIVE', -1) > 0: s.setsockopt(zmq.TCP_KEEPALIVE, self.zmq_tcp_keepalive) s.setsockopt(zmq.TCP_KEEPALIVE_INTVL, self.zmq_tcp_keepalive_intvl) s.setsockopt(zmq.TCP_KEEPALIVE_IDLE, self.zmq_tcp_keepalive_idle) s.setsockopt(zmq.TCP_KEEPALIVE_CNT, self.zmq_tcp_keepalive_cnt) s.connect(self.remote_url) return s def on_recv(self, zmsg): """Got message from remote CC, send to client.""" try: self.log.trace('') self.stat_inc('count') self.stat_inc('bytes', zmsg_size(zmsg)) self.cclocal.send_multipart(zmsg) except: self.log.exception('crashed, dropping msg') def handle_msg(self, cmsg): """Got message from client, send to remote CC.""" self.log.trace('') self.stream.send_cmsg(cmsg)