作者 lemon

新增转移终端优化方案2

@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 # @Author : Lemon 4 # @Author : Lemon
5 # @File : core.py 5 # @File : core.py
6 # @Software: PyCharm 6 # @Software: PyCharm
  7 +import functools
7 import json 8 import json
8 9
9 from tornado import ioloop 10 from tornado import ioloop
@@ -16,6 +17,12 @@ from lib.socket_ import MessageSocketClient @@ -16,6 +17,12 @@ from lib.socket_ import MessageSocketClient
16 monitor = Monitor() 17 monitor = Monitor()
17 18
18 19
  20 +def server_replace(ws_url):
  21 + '''新开一个socket尝试连接新地址,存储在临时变量里'''
  22 + monitor._temp_socket = MessageSocketClient(connect_success, message_receive)
  23 + monitor._temp_socket.connect(ws_url, reconnect=False) # 失败不重试
  24 +
  25 +
19 def message_receive(message): 26 def message_receive(message):
20 print("收到消息", message) 27 print("收到消息", message)
21 if message == 'login1': 28 if message == 'login1':
@@ -39,20 +46,24 @@ def message_receive(message): @@ -39,20 +46,24 @@ def message_receive(message):
39 print(traceback.format_exc()) 46 print(traceback.format_exc())
40 47
41 48
42 -def server_replace(ws_url):  
43 - monitor._temp_socket = MessageSocketClient(connect_success, message_receive)  
44 - monitor._temp_socket.connect(ws_url, reconnect=False) 49 +def host():
  50 + return 'ws://fbchat.data.gzntkj.com:8081', True
45 51
46 52
47 def connect_success(sock): 53 def connect_success(sock):
48 if monitor._temp_socket == sock: 54 if monitor._temp_socket == sock:
49 - sock.auto_reconnet = True 55 + sock.auto_reconnet = True # 新的连接成功后把断线重连开启
50 monitor._socket.quit() # 旧的断开 56 monitor._socket.quit() # 旧的断开
51 - monitor._temp_socket = None 57 + monitor._temp_socket = None # 清除临时变量
52 58
53 monitor.bind(sock) 59 monitor.bind(sock)
54 monitor._init_server_() 60 monitor._init_server_()
55 - monitor._socket.new_server_func = lambda: control_server.get_ws_address(monitor._name, sock.ws_url) 61 +
  62 + monitor._socket.new_server_func = functools.partial(
  63 + control_server.get_ws_address,
  64 + monitor._name,
  65 + sock.ws_url
  66 + )
56 monitor._socket.server_replace = server_replace 67 monitor._socket.server_replace = server_replace
57 68
58 69
@@ -15,7 +15,6 @@ def get_init_name(): @@ -15,7 +15,6 @@ def get_init_name():
15 15
16 def get_ws_address(name, source_ws): 16 def get_ws_address(name, source_ws):
17 data = {"name": name, "ws": source_ws} 17 data = {"name": name, "ws": source_ws}
18 -  
19 try: 18 try:
20 r = requests.post(SERVER + '/post_terminal_info', data, timeout=1) 19 r = requests.post(SERVER + '/post_terminal_info', data, timeout=1)
21 new_ws = r.json().get('data', {}).get('ws', source_ws) 20 new_ws = r.json().get('data', {}).get('ws', source_ws)
@@ -162,6 +162,8 @@ class MessageSocketClient(WebSocketClient): @@ -162,6 +162,8 @@ class MessageSocketClient(WebSocketClient):
162 self.reconnect() 162 self.reconnect()
163 163
164 def reconnect(self): 164 def reconnect(self):
  165 + if not self.auto_reconnet:
  166 + self.quit()
165 if not self.is_connected() and self.auto_reconnet: 167 if not self.is_connected() and self.auto_reconnet:
166 self._later_handler['reconnect'] = self._io_loop.call_later(self.reconnect_interval, 168 self._later_handler['reconnect'] = self._io_loop.call_later(self.reconnect_interval,
167 super(MessageSocketClient, self).connect, 169 super(MessageSocketClient, self).connect,