def generate_server_opts(ip='', port=8080, max_connect=20, recv_timeout=10000, send_timeout=10000): """ 生成默认服务启动参数 @param {string} ip='' - 主机名或IP地址 @param {int} port=8080 - 监听端口 @param {int} max_connect=20 - 允许最大连接数 @param {int} recv_timeout=10000 - 数据接收的超时时间,单位为毫秒 @param {int} send_timeout=10000 - 数据发送的超时时间,单位为毫秒 @returns {object} - 返回带参数属性的对象,例如对象为ret: ret.ip = '' ... """ _server_opts = NullObj() _server_opts.ip = ip # 主机名或IP地址 _server_opts.port = port # 监听端口 _server_opts.max_connect = max_connect # 允许最大连接数 _server_opts.recv_timeout = recv_timeout # 数据接收的超时时间,单位为毫秒 _server_opts.send_timeout = send_timeout # 数据发送的超时时间,单位为毫秒 return _server_opts
def generate_connect_para(ip='', port=50051, conn_str=None, timeout=None, is_use_ssl=False, root_certificates=None, private_key=None, certificate_chain=None, options=None, compression=None, test_on_connect=False, test_use_health_check=False, servicer_name='', logger=None, log_level=logging.INFO, is_use_global_logger=True, idpool=None, get_id_overtime=0, send_logging_para={}, back_logging_para={}, **kwargs): """ 生成客户端连接参数 @param {string} ip='' - 要连接的服务器IP 注意:TSLSSL模式下,客户端是通过"服务名称:port"来获取服务的凭据,而不是"ip:port", 如果使用TSL/SSL的情况客户端连接失败,可从这个角度排查解决问题 @param {int} port=50051 - 要连接的服务器端口 @param {conn_str} conn_str=None - 连接字符串,如果传入该字符串则不再使用ip和端口方式连接 连接字符串的格式如下:'ip协议(ipv4|ipv6):///ip1:port1,ip2:port2,...' 例如"ipv4:///1.2.3.4:9999,1.2.3.5:9999,1.2.3.6:9999" "ipv6:///[1::2]:9999,[1::3]:9999,[1::4]:9999" @param {number} timeout=None - 超时时间,单位为秒 @param {bool} is_use_ssl=False - 是否使用SSL/TLS @param {bytes} root_certificates=None - 用于验证服务器证书的根证书,即服务器端的公钥证书 The PEM-encoded root certificates as a byte string with open('ca.crt', 'rb') as f: root_certificates = f.read() @param {bytes} private_key=None - 当反向认证时(服务器验证客户端证书),客户端的私钥文件 The PEM-encoded private key as a byte string with open('server.pem', 'rb') as f: private_key = f.read() @param {bytes} certificate_chain=None - 当反向认证时(服务器验证客户端证书),客户端的公钥证书文件 The PEM-encoded certificate chain as a byte string with open('server.crt', 'rb') as f: certificate_chain = f.read() @param {?} options=None - An optional list of key-value pairs (channel args in gRPC Core runtime) to configure the channel @param {?} compression=None - An optional value indicating the compression method to be used over the lifetime of the channel @param {bool} test_on_connect=False - 连接时进行有效性测试 @param {bool} test_use_health_check=False - 使用标准的health_check进行测试 @param {string} servicer_name='' - 使用health_check进行测试的对应服务名(由服务端定义) @param {Logger} logger=None - 日志对象,服务过程中通过该函数写日志: 可以为标准的logging日志库对象,也可以为simple_log对象,但要求对象实现: 标准的info、debug、warning、error、critical五个日志方法 @param {int} log_level=logging.INFO - 处理中正常日志的输出登记级别,默认为INFO,如果不想输出 过多日志可以设置为DEBUG @param {bool} is_use_global_logger=True - 当logger=None时,是否使用全局logger对象 注:通过RunTool.set_global_logger进行设置 @param {HiveNetLib.IdPool} idpool=None - 获取id的资源池,如果传入None代表直接通过uuid生成id @param {number} get_id_overtime=0 - 超时时间,单位为秒,如果需要一直不超时送入0 @param {dict} send_logging_para={} - 接收报文打印参数 @param {dict} back_logging_para={} - 返回报文打印参数 send_logging_para的参数格式一致,定义如下: 'msg_class' {class} - 继承MsgFW框架的报文解析类对象,如果为None代表不处理信息 'logging_head' {dict}- 定义打印的日志规范头信息 key {string} - 日志头信息项名,例如'IP' value {string} - 日志头信息值,None代表从报文对象msg或proto_msg中获取(从api_mapping获取定义) 跟当前服务相关的可选信息项包括: C-IP : 客户端的IP地址 C-PORT : 客户端的连接端口 S-IP : 服务端绑定服务 S-PORT : 服务端监听端口 SERVICE_NAME : 访问的服务名 PARA_BYTES : 转换为字符串显示的参数字节数组信息 PARA_BYTES_LEN : 字节数组长度 RETURN_BYTES : 转换为字符串显示的响应字节数组信息 RETURN_BYTES_LEN : 响应报文字节数组长度 'api_mapping' {dict}- 定义从报文中获取logging_head所需的信息 'key_para' {dict} - 要打印的关键业务参数 'print_in_para' {dict} - 要打印的指定接口字段 以上三项的定义都是一样 key {string} - 打印信息项名 value {list}- 映射信息,为三项的数组: value[0] {string} - 获取api对象类型,'msg'或'proto_msg' value[1] {string} - 搜索路径,具体规则参考对应的MsgFW实例 value[2] {dict} - 获取参数,具体规则参考对应的MsgFW实例 'is_print_msg' {bool} - 是否打印报文内容 'msg_print_kwargs' {dict} - MsgFW对象(例如MsgJSON)的msg.to_str()函数的传入参数 @param {kwargs} - 动态参数,已定义的参数如下: id的资源池的get_id传入参数 @returns {object} - 返回带参数属性的对象,例如对象为ret: ret.ip = '' ... """ _connect_para = NullObj() _connect_para.ip = ip _connect_para.port = port _connect_para.conn_str = conn_str if conn_str == '': _connect_para.conn_str = None _connect_para.timeout = timeout if timeout is not None and timeout <= 0: _connect_para.timeout = None _connect_para.is_use_ssl = is_use_ssl # 是否使用SSL/TLS _connect_para.private_key = private_key _connect_para.certificate_chain = certificate_chain _connect_para.root_certificates = root_certificates _connect_para.options = options _connect_para.compression = compression _connect_para.test_on_connect = test_on_connect _connect_para.test_use_health_check = test_use_health_check _connect_para.servicer_name = servicer_name _connect_para.logger = logger _connect_para.log_level = log_level _connect_para.is_use_global_logger = is_use_global_logger _connect_para.idpool = idpool _connect_para.get_id_overtime = get_id_overtime _connect_para.send_logging_para = send_logging_para _connect_para.back_logging_para = back_logging_para _connect_para.kwargs = kwargs return _connect_para