예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
 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()
예제 #4
0
 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()
예제 #5
0
 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
예제 #6
0
        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)