Пример #1
0
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)
Пример #2
0
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)