Пример #1
0
class service:
    def __init__(self):
        self.ioloop = ZMQIOLoop()
        self.ioloop.install()
        return

    def process_message_two(self, msg):
        print "get thread two message"
        print "processing .....", msg
        return

    def process_message_three(self, msg):
        print "get thread three message"
        print "processing......", msg
        return

    def timeout(self):
        print "thread one timeout"
        data = {}
        data['thread'] = 'one'
        self.socket_to_others.send(zmqconfig.one_to_two_subject, zmq.SNDMORE)
        self.socket_to_others.send(json.dumps(data))
        self.socket_to_others.send(zmqconfig.one_to_three_subject, zmq.SNDMORE)
        self.socket_to_others.send(json.dumps(data))
        self.ioloop.add_timeout(time.time() + 3, self.timeout)
        return

    def run(self):
        self.socket_to_others = zmqconfig.context.socket(zmq.PUB)
        self.socket_to_others.bind(zmqconfig.one_zmq_addr)
        self.socket_from_two = zmqconfig.context.socket(zmq.SUB)
        self.socket_from_two.connect(zmqconfig.two_zmq_addr)
        self.socket_from_two.setsockopt(zmq.SUBSCRIBE,
                                        zmqconfig.two_to_one_subject)
        self.stream_from_two_sub = zmqstream.ZMQStream(self.socket_from_two)
        self.stream_from_two_sub.on_recv(self.process_message_two)
        self.socket_from_three = zmqconfig.context.socket(zmq.SUB)
        self.socket_from_three.connect(zmqconfig.three_zmq_addr)
        self.socket_from_three.setsockopt(zmq.SUBSCRIBE,
                                          zmqconfig.three_to_one_subject)
        self.socket_from_three_sub = zmqstream.ZMQStream(
            self.socket_from_three)
        self.socket_from_three_sub.on_recv(self.process_message_three)
        self.ioloop.add_timeout(time.time(), self.timeout)
        application = tornado.web.Application(urls)
        application.listen(8887)
        self.ioloop.start()
        return
Пример #2
0
class service:

    def __init__(self):
        self.ioloop = ZMQIOLoop()
        self.ioloop.install()
        return

    def process_message_two(self, msg):
        print "get thread two message"
        print "processing .....", msg
        return

    def process_message_three(self, msg):
        print "get thread three message"
        print "processing......", msg
        return

    def timeout(self):
        print "thread one timeout"
        data = {}
        data['thread'] = 'one'
        self.socket_to_others.send(zmqconfig.one_to_two_subject, zmq.SNDMORE)
        self.socket_to_others.send(json.dumps(data))
        self.socket_to_others.send(zmqconfig.one_to_three_subject, zmq.SNDMORE)
        self.socket_to_others.send(json.dumps(data))
        self.ioloop.add_timeout(time.time() + 3, self.timeout)
        return

    def run(self):
        self.socket_to_others = zmqconfig.context.socket(zmq.PUB)
        self.socket_to_others.bind(zmqconfig.one_zmq_addr)
        self.socket_from_two = zmqconfig.context.socket(zmq.SUB)
        self.socket_from_two.connect(zmqconfig.two_zmq_addr)
        self.socket_from_two.setsockopt(zmq.SUBSCRIBE, zmqconfig.two_to_one_subject)
        self.stream_from_two_sub = zmqstream.ZMQStream(self.socket_from_two)
        self.stream_from_two_sub.on_recv(self.process_message_two)
        self.socket_from_three = zmqconfig.context.socket(zmq.SUB)
        self.socket_from_three.connect(zmqconfig.three_zmq_addr)
        self.socket_from_three.setsockopt(zmq.SUBSCRIBE, zmqconfig.three_to_one_subject)
        self.socket_from_three_sub = zmqstream.ZMQStream(self.socket_from_three)
        self.socket_from_three_sub.on_recv(self.process_message_three)
        self.ioloop.add_timeout(time.time(), self.timeout)
        application = tornado.web.Application(urls)
        application.listen(8887)
        self.ioloop.start()
        return
Пример #3
0
    def perform(self, request):
        def on_timeout():
            io_loop.remove_timeout(to)
            self.pool.put_stream(stream)
            raise TimeoutError("timeout")

        def on_response(message):
            io_loop.remove_timeout(to)
            self.pool.put_stream(stream)
            response = ResponseFactory().loads(message[0])
            if response.error == ERROR_EXCEPTION:
                raise response.result
            future.set_result(response)

        future = Future()
        stream = self.pool.get_stream()
        stream.send(RequestFactory().dumps(request))
        io_loop = ZMQIOLoop().instance()
        wait_time = datetime.timedelta(seconds=2)
        to = io_loop.add_timeout(wait_time, on_timeout)
        stream.on_recv(on_response)
        return future
Пример #4
0
    def perform(self, request):
        def on_timeout():
            io_loop.remove_timeout(to)
            future.set_result(response)
            raise TimeoutError("timeout")

        def on_response(message):
            io_loop.remove_timeout(to)
            if not future.done():
                response = ResponseFactory().loads(message[0])
                future.set_result(response)
                if response.error == ERROR_EXCEPTION:
                    raise response.result
            self.pool.put_stream(stream)

        future = Future()
        response = Response()
        stream = self.pool.get_stream()
        stream.send(RequestFactory().dumps(request))
        io_loop = ZMQIOLoop().instance()
        wait_time = datetime.timedelta(seconds=2)
        to = io_loop.add_timeout(wait_time, on_timeout)
        stream.on_recv(on_response)
        return future
Пример #5
0
class service:
    def __init__(self):
        self.ioloop = ZMQIOLoop()
        self.ioloop.install()
        self.clients = {}
        self.in_client = "server"
        return

    def process_message_client(self, msg):
        body = json.loads(bytes.decode(msg[1]))
        # from client heart
        if body["type"] == "heart":
            clients = json.loads(bytes.decode(msg[0]))
            ip = clients["ip"]
            if ip not in self.clients:
                self.clients[ip] = {}
                self.clients[ip]["time"] = time.time()
                self.clients[ip]["tag"] = bytes.decode(msg[0])
            else:
                self.clients[ip]["time"] = time.time()

            pass
        # from input t
        elif body["type"] == "cmd":
            # a = os.system(body["cmd"])
            ip_cmd = body["ip_cmd"]
            if self.in_client == "server":  # input to server
                temp_ip_cmd = body["ip_cmd"].split(" ", 1)
                if temp_ip_cmd[0] == "ls":
                    message = {}
                    message["type"] = "server_message"
                    if self.clients != {}:
                        # del overdate
                        for ip in self.clients:
                            if time.time() - self.clients[ip]["time"] > float(
                                    server_config.delay):
                                self.clients[ip]["time"] = 0
                        message["clients"] = self.clients
                    else:
                        message["clients"] = {}
                    self.socket_to_others.send_string(
                        server_config.server_to_input_subject, zmq.SNDMORE)
                    self.socket_to_others.send_string(json.dumps(message))
                elif temp_ip_cmd[0] == "ssh":
                    if temp_ip_cmd[1] in self.clients:
                        self.in_client = self.clients[temp_ip_cmd[1]]['tag']
                        message = {}
                        message["type"] = "state"
                        message["state"] = temp_ip_cmd[1]
                        self.socket_to_others.send_string(
                            server_config.server_to_input_subject, zmq.SNDMORE)
                        self.socket_to_others.send_string(json.dumps(message))
                    else:
                        message = {}
                        message["type"] = "error"
                        message["error"] = "no client is %s" % temp_ip_cmd[1]
                        self.socket_to_others.send_string(
                            server_config.server_to_input_subject, zmq.SNDMORE)
                        self.socket_to_others.send_string(json.dumps(message))

                else:
                    message = {}
                    message["type"] = "error"
                    message["error"] = "sorry, server no this cmd"
                    self.socket_to_others.send_string(
                        server_config.server_to_input_subject, zmq.SNDMORE)
                    self.socket_to_others.send_string(json.dumps(message))
                    return

            else:  # input to client
                temp_ip_cmd = body["ip_cmd"].split(" ", 1)
                if temp_ip_cmd[0] == "exit":
                    self.in_client = "server"
                    message = {}
                    message["type"] = "state"
                    message["state"] = "server"
                    self.socket_to_others.send_string(
                        server_config.server_to_input_subject, zmq.SNDMORE)
                    self.socket_to_others.send_string(json.dumps(message))
                else:
                    try:
                        tag = self.in_client
                        self.socket_to_others.send_string(tag, zmq.SNDMORE)
                        self.socket_to_others.send_string(
                            json.dumps({
                                "type": "cmd",
                                "cmd": ip_cmd
                            }))
                    except Exception as err:
                        message = {}
                        message["type"] = "error"
                        message["error"] = "unexcept error is occur!"
                        self.socket_to_others.send_string(
                            server_config.server_to_input_subject, zmq.SNDMORE)
                        self.socket_to_others.send_string(json.dumps(message))
        # from client cmd_result
        elif body["type"] == "cmd_result":
            self.socket_to_others.send_string(
                server_config.server_to_input_subject, zmq.SNDMORE)
            self.socket_to_others.send_string(json.dumps(body))
        return

    def timeout(self):

        # self.socket_to_others.send_string(zmqconfig.server_to_client_subject, zmq.SNDMORE)
        # self.socket_to_others.send_string(json.dumps(""))
        self.ioloop.add_timeout(time.time() + 3, self.timeout)
        return

    def run(self):
        self.socket_to_others = server_config.context.socket(zmq.PUB)
        self.socket_to_others.bind(server_config.server_zmq_addr)

        # 服务端收信息,不同机子
        self.socket_from_others = server_config.context.socket(zmq.SUB)
        self.socket_from_others.setsockopt_string(zmq.SUBSCRIBE, "")
        self.socket_from_others.bind(server_config.server_zmq_addr_accept)
        self.stream_from_others_sub = zmqstream.ZMQStream(
            self.socket_from_others)
        self.stream_from_others_sub.on_recv(self.process_message_client)

        self.ioloop.add_timeout(time.time(), self.timeout)
        # application = tornado.web.Application(urls)
        # application.listen(8887)
        self.ioloop.start()
        return