def connect(self, ip='101.227.73.20', port=7709): """ :param ip: 服务器ip 地址 :param port: 服务器端口 :return: 是否连接成功 True/False """ self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.client.settimeout(CONNECT_TIMEOUT) log.debug("connecting to server : %s on port :%d" % (ip, port)) try: self.client.connect((ip, port)) except socket.timeout as e: print(str(e)) log.debug("connection expired") return False log.debug("connected!") if self.need_setup: self.setup() if self.heartbeat: self.stop_event = threading.Event() self.heartbeat_thread = HqHeartBeatThread(self, self.stop_event, self.heartbeat_interval) self.heartbeat_thread.start() return self
def connect(self, ip='101.227.73.20', port=7709, time_out=CONNECT_TIMEOUT, bindport=None, bindip='0.0.0.0'): """ :param ip: 服务器ip 地址 :param port: 服务器端口 :param time_out: 连接超时时间 :param bindport: 绑定的本地端口 :param bindip: 绑定的本地ip :return: 是否连接成功 True/False """ self.client = TrafficStatSocket(socket.AF_INET, socket.SOCK_STREAM) self.client.settimeout(time_out) log.debug("connecting to server : %s on port :%d" % (ip, port)) try: self.ip = ip self.port = port if bindport is not None: self.client.bind((bindip, bindport)) self.client.connect((ip, port)) except socket.timeout as e: # print(str(e)) log.debug("connection expired") if self.raise_exception: raise TdxConnectionError("connection timeout error") return False except Exception as e: if self.raise_exception: raise TdxConnectionError("other errors") return False log.debug("connected!") if self.need_setup: self.setup() if self.heartbeat: self.stop_event = threading.Event() self.heartbeat_thread = HqHeartBeatThread(self, self.stop_event, self.heartbeat_interval) self.heartbeat_thread.start() return self
def connect(self, ip='101.227.73.20', port=7709, time_out=CONNECT_TIMEOUT, bindport=None, bindip='0.0.0.0'): """ :param ip: 服务器ip 地址 :param port: 服务器端口 :param time_out: 连接超时时间 :param bindport: 绑定的本地端口 :param bindip: 绑定的本地ip :return: 是否连接成功 True/False """ self.client = TrafficStatSocket(socket.AF_INET, socket.SOCK_STREAM) self.client.settimeout(time_out) log.debug("connecting to server : %s on port :%d" % (ip, port)) try: self.ip = ip self.port = port if bindport is not None: self.client.bind((bindip, bindport)) self.client.connect((ip, port)) except socket.timeout as e: # print(str(e)) log.debug("connection expired") if self.raise_exception: raise TdxConnectionError("connection timeout error") return False except Exception as e: if self.raise_exception: raise TdxConnectionError("other errors") return False log.debug("connected!") if self.need_setup: self.setup() if self.heartbeat: self.stop_event = threading.Event() self.heartbeat_thread = HqHeartBeatThread( self, self.stop_event, self.heartbeat_interval) self.heartbeat_thread.start() return self
class BaseSocketClient(object): def __init__(self, multithread=False, heartbeat=False, auto_retry=False, raise_exception=False): self.need_setup = True if multithread or heartbeat: self.lock = threading.Lock() else: self.lock = None self.client = None self.heartbeat = heartbeat self.heartbeat_thread = None self.stop_event = None self.heartbeat_interval = DEFAULT_HEARTBEAT_INTERVAL # 默认10秒一个心跳包 self.last_ack_time = time.time() self.last_transaction_failed = False self.ip = None self.port = None # 是否重试 self.auto_retry = auto_retry # 可以覆盖这个属性,使用新的重试策略 self.retry_strategy = DefaultRetryStrategy() # 是否在函数调用出错的时候抛出异常 self.raise_exception = raise_exception def connect(self, ip='119.147.212.81', port=7709, time_out=CONNECT_TIMEOUT, bindport=None, bindip='0.0.0.0'): # 119.147.212.81 """ :param ip: 服务器ip 地址 :param port: 服务器端口 :param time_out: 连接超时时间 :param bindport: 绑定的本地端口 :param bindip: 绑定的本地ip :return: 是否连接成功 True/False """ self.client = TrafficStatSocket(socket.AF_INET, socket.SOCK_STREAM) self.client.settimeout(time_out) log.debug("connecting to server : %s on port :%d" % (ip, port)) try: self.ip = ip self.port = port if bindport is not None: self.client.bind((bindip, bindport)) self.client.connect((ip, port)) except socket.timeout as e: # print(str(e)) log.debug("connection expired") if self.raise_exception: raise TdxConnectionError("connection timeout error") return False except Exception as e: if self.raise_exception: raise TdxConnectionError("other errors") return False log.debug("connected!") if self.need_setup: self.setup() if self.heartbeat: self.stop_event = threading.Event() self.heartbeat_thread = HqHeartBeatThread( self, self.stop_event, self.heartbeat_interval) self.heartbeat_thread.start() return self def disconnect(self): if self.heartbeat_thread and \ self.heartbeat_thread.is_alive(): self.stop_event.set() if self.client: log.debug("disconnecting") try: self.client.shutdown(socket.SHUT_RDWR) self.client.close() self.client = None except Exception as e: log.debug(str(e)) if self.raise_exception: raise TdxConnectionError("disconnect err") log.debug("disconnected") def close(self): """ disconnect的别名,为了支持 with closing(obj): 语法 :return: """ self.disconnect() def get_traffic_stats(self): """ 获取流量统计的信息 :return: """ if self.client.first_pkg_send_time is not None: total_seconds = (datetime.datetime.now() - self.client.first_pkg_send_time).total_seconds() if total_seconds != 0: send_bytes_per_second = self.client.send_pkg_bytes // total_seconds recv_bytes_per_second = self.client.recv_pkg_bytes // total_seconds else: send_bytes_per_second = None recv_bytes_per_second = None else: total_seconds = None send_bytes_per_second = None recv_bytes_per_second = None return { "send_pkg_num": self.client.send_pkg_num, "recv_pkg_num": self.client.recv_pkg_num, "send_pkg_bytes": self.client.send_pkg_bytes, "recv_pkg_bytes": self.client.recv_pkg_bytes, "first_pkg_send_time": self.client.first_pkg_send_time, "total_seconds": total_seconds, "send_bytes_per_second": send_bytes_per_second, "recv_bytes_per_second": recv_bytes_per_second, "last_api_send_bytes": self.client.last_api_send_bytes, "last_api_recv_bytes": self.client.last_api_recv_bytes, } # for debuging and testing protocol def send_raw_pkg(self, pkg): cmd = RawParser(self.client, lock=self.lock) cmd.setParams(pkg) return cmd.call_api() def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.close() def to_df(self, v): if isinstance(v, list): return pd.DataFrame(data=v) elif isinstance(v, dict): return pd.DataFrame(data=[v, ]) else: return pd.DataFrame(data=[{'value': v}])
class BaseSocketClient(object): def __init__(self, multithread=False, heartbeat=False): self.need_setup = True if multithread or heartbeat: self.lock = threading.Lock() else: self.lock = None self.client = None self.heartbeat = heartbeat self.heartbeat_thread = None self.stop_event = None self.heartbeat_interval = DEFAULT_HEARTBEAT_INTERVAL # 默认10秒一个心跳包 self.last_ack_time = time.time() self.last_transaction_failed = False def connect(self, ip='101.227.73.20', port=7709): """ :param ip: 服务器ip 地址 :param port: 服务器端口 :return: 是否连接成功 True/False """ self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.client.settimeout(CONNECT_TIMEOUT) log.debug("connecting to server : %s on port :%d" % (ip, port)) try: self.client.connect((ip, port)) except socket.timeout as e: print(str(e)) log.debug("connection expired") return False log.debug("connected!") if self.need_setup: self.setup() if self.heartbeat: self.stop_event = threading.Event() self.heartbeat_thread = HqHeartBeatThread(self, self.stop_event, self.heartbeat_interval) self.heartbeat_thread.start() return self def disconnect(self): if self.heartbeat_thread and \ self.heartbeat_thread.is_alive(): self.stop_event.set() if self.client: log.debug("disconnecting") try: self.client.shutdown(socket.SHUT_RDWR) self.client.close() self.client = None except Exception as e: log.debug(str(e)) log.debug("disconnected") def close(self): """ disconnect的别名,为了支持 with closing(obj): 语法 :return: """ self.disconnect() def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.close() def to_df(self, v): if isinstance(v, list): return pd.DataFrame(data=v) elif isinstance(v, dict): return pd.DataFrame(data=[ v, ]) else: return pd.DataFrame(data=[{'value': v}])
class BaseSocketClient(object): def __init__(self, multithread=False, heartbeat=False, auto_retry=False, raise_exception=False): self.need_setup = True if multithread or heartbeat: self.lock = threading.Lock() else: self.lock = None self.client = None self.heartbeat = heartbeat self.heartbeat_thread = None self.stop_event = None self.heartbeat_interval = DEFAULT_HEARTBEAT_INTERVAL # 默认10秒一个心跳包 self.last_ack_time = time.time() self.last_transaction_failed = False self.ip = None self.port = None # 是否重试 self.auto_retry = auto_retry # 可以覆盖这个属性,使用新的重试策略 self.retry_strategy = DefaultRetryStrategy() # 是否在函数调用出错的时候抛出异常 self.raise_exception = raise_exception def connect(self, ip='101.227.73.20', port=7709, time_out=CONNECT_TIMEOUT, bindport=None, bindip='0.0.0.0'): """ :param ip: 服务器ip 地址 :param port: 服务器端口 :param time_out: 连接超时时间 :param bindport: 绑定的本地端口 :param bindip: 绑定的本地ip :return: 是否连接成功 True/False """ self.client = TrafficStatSocket(socket.AF_INET, socket.SOCK_STREAM) self.client.settimeout(time_out) log.debug("connecting to server : %s on port :%d" % (ip, port)) try: self.ip = ip self.port = port if bindport is not None: self.client.bind((bindip, bindport)) self.client.connect((ip, port)) except socket.timeout as e: # print(str(e)) log.debug("connection expired") if self.raise_exception: raise TdxConnectionError("connection timeout error") return False except Exception as e: if self.raise_exception: raise TdxConnectionError("other errors") return False log.debug("connected!") if self.need_setup: self.setup() if self.heartbeat: self.stop_event = threading.Event() self.heartbeat_thread = HqHeartBeatThread( self, self.stop_event, self.heartbeat_interval) self.heartbeat_thread.start() return self def disconnect(self): if self.heartbeat_thread and \ self.heartbeat_thread.is_alive(): self.stop_event.set() if self.client: log.debug("disconnecting") try: self.client.shutdown(socket.SHUT_RDWR) self.client.close() self.client = None except Exception as e: log.debug(str(e)) if self.raise_exception: raise TdxConnectionError("disconnect err") log.debug("disconnected") def close(self): """ disconnect的别名,为了支持 with closing(obj): 语法 :return: """ self.disconnect() def get_traffic_stats(self): """ 获取流量统计的信息 :return: """ if self.client.first_pkg_send_time is not None: total_seconds = (datetime.datetime.now() - self.client.first_pkg_send_time).total_seconds() if total_seconds != 0: send_bytes_per_second = self.client.send_pkg_bytes // total_seconds recv_bytes_per_second = self.client.recv_pkg_bytes // total_seconds else: send_bytes_per_second = None recv_bytes_per_second = None else: total_seconds = None send_bytes_per_second = None recv_bytes_per_second = None return { "send_pkg_num": self.client.send_pkg_num, "recv_pkg_num": self.client.recv_pkg_num, "send_pkg_bytes": self.client.send_pkg_bytes, "recv_pkg_bytes": self.client.recv_pkg_bytes, "first_pkg_send_time": self.client.first_pkg_send_time, "total_seconds": total_seconds, "send_bytes_per_second": send_bytes_per_second, "recv_bytes_per_second": recv_bytes_per_second, "last_api_send_bytes": self.client.last_api_send_bytes, "last_api_recv_bytes": self.client.last_api_recv_bytes, } # for debuging and testing protocol def send_raw_pkg(self, pkg): cmd = RawParser(self.client, lock=self.lock) cmd.setParams(pkg) return cmd.call_api() def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.close() def to_df(self, v): if isinstance(v, list): return pd.DataFrame(data=v) elif isinstance(v, dict): return pd.DataFrame(data=[v, ]) else: return pd.DataFrame(data=[{'value': v}])