From 5abfd38744fd28b52b19bcf9c8ec08ef3777866e Mon Sep 17 00:00:00 2001 From: lemon <961222258@qq.com> Date: Sat, 15 Feb 2020 22:31:28 +0800 Subject: [PATCH] 新增转移终端优化方案2 --- core/core.py | 23 +++++++++++++++++------ lib/control_server.py | 1 - lib/socket_.py | 2 ++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/core/core.py b/core/core.py index 4ba54f8..01f98e8 100644 --- a/core/core.py +++ b/core/core.py @@ -4,6 +4,7 @@ # @Author : Lemon # @File : core.py # @Software: PyCharm +import functools import json from tornado import ioloop @@ -16,6 +17,12 @@ from lib.socket_ import MessageSocketClient monitor = Monitor() +def server_replace(ws_url): + '''新开一个socket尝试连接新地址,存储在临时变量里''' + monitor._temp_socket = MessageSocketClient(connect_success, message_receive) + monitor._temp_socket.connect(ws_url, reconnect=False) # 失败不重试 + + def message_receive(message): print("收到消息", message) if message == 'login1': @@ -39,20 +46,24 @@ def message_receive(message): print(traceback.format_exc()) -def server_replace(ws_url): - monitor._temp_socket = MessageSocketClient(connect_success, message_receive) - monitor._temp_socket.connect(ws_url, reconnect=False) +def host(): + return 'ws://fbchat.data.gzntkj.com:8081', True def connect_success(sock): if monitor._temp_socket == sock: - sock.auto_reconnet = True + sock.auto_reconnet = True # 新的连接成功后把断线重连开启 monitor._socket.quit() # 旧的断开 - monitor._temp_socket = None + monitor._temp_socket = None # 清除临时变量 monitor.bind(sock) monitor._init_server_() - monitor._socket.new_server_func = lambda: control_server.get_ws_address(monitor._name, sock.ws_url) + + monitor._socket.new_server_func = functools.partial( + control_server.get_ws_address, + monitor._name, + sock.ws_url + ) monitor._socket.server_replace = server_replace diff --git a/lib/control_server.py b/lib/control_server.py index d90a254..39bc874 100644 --- a/lib/control_server.py +++ b/lib/control_server.py @@ -15,7 +15,6 @@ def get_init_name(): def get_ws_address(name, source_ws): data = {"name": name, "ws": source_ws} - try: r = requests.post(SERVER + '/post_terminal_info', data, timeout=1) new_ws = r.json().get('data', {}).get('ws', source_ws) diff --git a/lib/socket_.py b/lib/socket_.py index 793e71d..37522d5 100644 --- a/lib/socket_.py +++ b/lib/socket_.py @@ -162,6 +162,8 @@ class MessageSocketClient(WebSocketClient): self.reconnect() def reconnect(self): + if not self.auto_reconnet: + self.quit() if not self.is_connected() and self.auto_reconnet: self._later_handler['reconnect'] = self._io_loop.call_later(self.reconnect_interval, super(MessageSocketClient, self).connect, -- libgit2 0.24.0