作者 lemon

更新代码3

... ... @@ -21,6 +21,7 @@ monitor.version = settings.get_version()
def server_replace(ws_url):
'''新开一个socket尝试连接新地址,存储在临时变量里'''
monitor._temp_socket = MessageSocketClient(connect_success, message_receive)
set_new_server_func(monitor._temp_socket)
monitor._temp_socket.connect(ws_url, monitor._name, monitor._imei, reconnect=False) # 失败不重试
... ... @@ -59,18 +60,24 @@ def connect_success(sock):
monitor.bind(sock) # 替换Sock
monitor.initialize() # 发送初始化消息
monitor._socket.new_server_func = functools.partial(
def set_new_server_func(sock):
sock.new_server_func = functools.partial(
control_server.post_terminal_info,
monitor._name,
sock.ws_url,
monitor.size,
monitor.version.name
) # 设置上报服务器的函数
monitor._socket.server_replace = server_replace # 设置开启新服务器的逻辑
lambda: monitor._name,
lambda: sock.ws_url,
lambda: monitor.size,
lambda: monitor.version.name
)
sock.server_replace = server_replace
def run():
socket = MessageSocketClient(connect_success, message_receive)
set_new_server_func(socket)
monitor.bind(socket)
conf = settings.get_server()
conf.update({'url': monitor._host, 'name': monitor._name, 'uuid': monitor._imei})
socket.connect(**conf)
... ...
... ... @@ -16,22 +16,21 @@ def get_init_name():
return "FBCHAT-{}".format(num)
def post_terminal_info(name, source_ws, num, version):
def post_terminal_info(name_f, source_ws_f, num_f, version_f):
data = {
"name": name,
"ws": source_ws,
"num": num,
"version": version,
"name": name_f(),
"ws": source_ws_f(),
"num": num_f(),
"version": version_f(),
}
data.update(system_info.get())
global _host
if not _host:
_host = netutil.getip()
data['ip'] = _host
print(data)
try:
r = requests.post(SERVER + '/post_terminal_info', json=data, timeout=1)
new_ws = r.json().get('data', {}).get('ws', source_ws)
new_ws = r.json().get('data', {}).get('ws', data['ws'])
except:
new_ws = source_ws
return new_ws, not new_ws == source_ws
new_ws = data['ws']
return new_ws, not new_ws == data['ws']
... ...
... ... @@ -38,6 +38,7 @@ class WebSocketClient(object):
self._io_loop = io_loop or ioloop.IOLoop.current()
self._ws_connection = None
self._connect_status = self.DISCONNECTED
self._clientname = self._clientuuid = None
def connect(self, url):
self._connect_status = self.CONNECTING
... ... @@ -128,7 +129,7 @@ class MessageSocketClient(WebSocketClient):
self._io_loop = ioloop.IOLoop.current()
self.ws_url = None
self.auto_net = False
self.heartbeat_interval_in_secs = 3
self.heartbeat_interval_in_secs = 30
super(MessageSocketClient, self).__init__(self._io_loop,
self.connect_timeout,
... ... @@ -200,28 +201,3 @@ class MessageSocketClient(WebSocketClient):
self.close("quit")
for k, handler in self._later_handler.items():
self._io_loop.remove_timeout(handler)
if __name__ == '__main__':
def success(sock):
global sockccc
sockccc = sock
def rec(msg):
if msg == 'quit':
sockccc.quit()
def interval():
if sockccc:
sockccc.send({'test': time.time()})
Timer(3, interval).start()
s1 = MessageSocketClient()
s1.connect('ws://localhost:10000', reconnect=False)
Timer(2, interval).start()
ioloop.IOLoop.current().start()
... ...