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
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
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
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
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