def register_socketIP(self, socketIP, socketPost, label): # 注册socket服务器IP try: # 删除相同标志的IP for socket_server in self.RH.smembers("socket_server_set"): socket_dist = self.RH.hgetall(socket_server) if socket_dist != {} and socket_dist.get('label') == label: self.RH.delete(socket_server) self.RH.srem("socket_server_set", socket_server) if socket_dist == {}: self.RH.srem("socket_server_set", socket_server) # 注册新IP ip_str = "sss" + socketIP + str(socketPost) ip_str = ip_str.replace(".", "") if not self.RH.sismember("socket_server_set", ip_str): self.RH.sadd("socket_server_set", ip_str) self.RH.hset(ip_str, "host", socketIP) self.RH.hset(ip_str, "port", socketPost) self.RH.hset(ip_str, "label", label) from models.public.headers_model import global_Models G = global_Models() G.set_map("label", label) return True except Exception as err: # print(err) return False
def initClientIP(self, sockname): # 获得需要通知的服务器列表 R = RedisClass() G = global_Models() sss_list_new = [] sss_list_old = G.get("socket_server_set") if sss_list_old == None: sss_list_old = [] for sss_name in R.RH.smembers("socket_server_set"): sss = R.RH.hgetall(sss_name) flag = 0 for sss_name_old in sss_list_old: if sss['host'] == sss_name_old['host'] and int( sss['port']) == int(sss_name_old['port']): flag = 1 sss_list_new.append(sss_name_old) if flag == 0: # 不存在则增加 if sss and (sss['host'], int(sss['port'])) != sockname: # 不是自身服务器 sss['time_vol'] = 0 sss['flag'] = 0 # 0,无状态;1,接收端,2,发送端 sss['me'] = 0 # 0,其他服务器;1,自己本身 else: sss['time_vol'] = 0 sss['flag'] = 0 # 0,无状态;1,接收端,2,发送端 sss['me'] = 1 # 0,其他服务器;1,自己本身 sss_list_new.append(sss) G.set_map("socket_server_set", sss_list_new) return
def __init__(self, stream, address): Connection.clients.add(self) self._stream = stream self._address = address self.clients_state = True # self.client_list = client_list self.msg_disc = { 'uaid': -1, 'followid': -1, 'sendid': -1, 'return': -1, 'time_vol': 0, } self.S = None self.G = global_Models() self._stream.set_close_callback(self.on_close) self.read_message()
def __init__(self, client_id, label, host, port, io_loop): SocketClientModel.clients.add(self) self.label = label self.client_id = client_id self.host = host self.port = port self.flag = False self.time_vol = 0 self.io_loop = io_loop self.sock_fd = None self.stream = None self.G = global_Models() if self.G.get("msg_list"): self.msgDist = eval(self.G.get("msg_list")) else: self.msgDist = {} # self.sock_fd = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) # self.stream = iostream.IOStream(self.sock_fd) # self.stream.set_close_callback(self.on_receive) # self.msgDist = {} # self.connect() # self.receive_message() self.sock_while()
def mark_socket_global(self, label, flag, time_vol=0): G = global_Models() # R = RedisClass() sss_list_old = G.get("socket_server_set") sss_list_new = [] sss_set_new = self.RH.smembers("socket_server_set") if sss_list_old == None: sss_list_old = [] if len(sss_list_old) == len(sss_set_new): sss_list_new = yield self.set_sss_dist(label, flag, time_vol, sss_list_old) else: for sss_name in sss_set_new: sss = self.RH.hgetall(sss_name) sss_dist_new = yield self.search_sss_dist(label, flag, time_vol, sss, sss_list_old) if sss_dist_new == {}: # 没有找到,新增 sss['time_vol'] = 0 sss['flag'] = 0 # 0,无状态;1,接收端,2,发送端 sss_list_new.append(sss) else: sss_list_new.append(sss_dist_new) G.set_map("socket_server_set", sss_list_new) return
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(('8.8.8.8', 80)) ip = s.getsockname()[0] finally: s.close() return ip client_id = 0 if __name__ == '__main__': client_label = "b" port = 9001 print("TCPServer start ......") from models.public.headers_model import global_Models G = global_Models() G.set_map("ServerTime", 0) # ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) # ssl_ctx.load_cert_chain(os.path.join("/home/ssl/", "fullchain.pem"), # os.path.join("/home/ssl/", "privkey.pem")) # TCPServer(ssl_options=ssl_ctx) import socket from handlers.myredis.redis_class import RedisClass R = RedisClass() R.register_socketIP(get_host_ip(), port, client_label) # R.register_socketIP(socket.gethostbyname(socket.gethostname()), port, client_label) # R.register_socketIP("127.0.0.1", port, client_label) log_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "log") logInit_socket(log_path) # server = CopyServer(ssl_options=ssl_ctx)