Exemple #1
0
    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
Exemple #2
0
    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