NewLife.Core 对齐模型。数据采样时X轴对齐 不对齐,原始值 左对齐 中间对齐 右对齐 平均值采样算法 对齐模式。每个桶X轴对齐方式 插值填充算法 降采样处理。保留边界两个点 原始数据 阈值,采样数 混合处理,降采样和插值,不保留边界节点 原始数据 桶大小。如60/3600/86400 偏移量。时间不是对齐零点时使用 插值算法 插值处理 数据 上一个点索引 下一个点索引 当前点时间值 采样接口。负责降采样和插值处理,用于处理时序数据 对齐模式。每个桶X轴对齐方式 插值填充算法 降采样处理 原始数据 阈值,采样数 混合处理,降采样和插值 原始数据 桶大小。如60/3600/86400 偏移量。时间不是对齐零点时使用 采样助手 按照指定桶数平均分,可指定保留头尾 按照固定时间间隔,拆分数据轴为多个桶 原始数据 桶大小。如60/3600/86400 偏移量。时间不是对齐零点时使用 线性插值 插值处理 数据 上一个点索引 下一个点索引 当前点时间值 缓存 默认缓存 名称 默认过期时间。避免Set操作时没有设置过期时间,默认0秒表示不过期 获取和设置缓存,使用默认过期时间 缓存个数 所有键 构造函数 使用连接字符串初始化配置 是否包含缓存项 设置缓存项 过期时间,秒 设置缓存项 过期时间 获取缓存项 批量移除缓存项 键集合 清空所有缓存项 设置缓存项有效期 过期时间,秒 获取缓存项有效期 批量获取缓存项 批量设置缓存项 过期时间,秒 获取列表 元素类型 获取哈希 元素类型 获取队列 元素类型 获取栈 元素类型 获取Set 添加,已存在时不更新 值类型 过期时间,秒 设置新值并获取旧值,原子操作 值类型 尝试获取指定键,返回是否包含值。有可能缓存项刚好是默认值,或者只是反序列化失败 值类型 值。即使有值也不一定能够返回,可能缓存项刚好是默认值,或者只是反序列化失败 返回是否包含值,即使反序列化失败 获取 或 添加 缓存数据,在数据不存在时执行委托请求数据 过期时间,秒。小于0时采用默认缓存时间 累加,原子操作 变化量 累加,原子操作 变化量 递减,原子操作 变化量 递减,原子操作 变化量 提交变更。部分提供者需要刷盘 申请分布式锁 要锁定的key 锁等待时间,单位毫秒 申请分布式锁 要锁定的key 锁等待时间,申请加锁时如果遇到冲突则等待的最大时间,单位毫秒 锁过期时间,超过该时间如果没有主动释放则自动释放锁,必须整数秒,单位毫秒 失败时是否抛出异常,如果不抛出异常,可通过返回null得知申请锁失败 多线程性能测试 随机读写。顺序,每个线程多次操作一个key;随机,每个线程每次操作不同key 批量操作。默认0不分批,分批仅针对随机读写,对顺序读写的单key操作没有意义 Memory性能测试[顺序],逻辑处理器 32 个 2,000MHz Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz 测试 10,000,000 项, 1 线程 赋值 10,000,000 项, 1 线程,耗时 3,764ms 速度 2,656,748 ops 读取 10,000,000 项, 1 线程,耗时 1,296ms 速度 7,716,049 ops 删除 10,000,000 项, 1 线程,耗时 1,230ms 速度 8,130,081 ops 测试 20,000,000 项, 2 线程 赋值 20,000,000 项, 2 线程,耗时 3,088ms 速度 6,476,683 ops 读取 20,000,000 项, 2 线程,耗时 1,051ms 速度 19,029,495 ops 删除 20,000,000 项, 2 线程,耗时 1,011ms 速度 19,782,393 ops 测试 40,000,000 项, 4 线程 赋值 40,000,000 项, 4 线程,耗时 3,060ms 速度 13,071,895 ops 读取 40,000,000 项, 4 线程,耗时 1,023ms 速度 39,100,684 ops 删除 40,000,000 项, 4 线程,耗时 994ms 速度 40,241,448 ops 测试 80,000,000 项, 8 线程 赋值 80,000,000 项, 8 线程,耗时 3,124ms 速度 25,608,194 ops 读取 80,000,000 项, 8 线程,耗时 1,171ms 速度 68,317,677 ops 删除 80,000,000 项, 8 线程,耗时 1,199ms 速度 66,722,268 ops 测试 320,000,000 项, 32 线程 赋值 320,000,000 项, 32 线程,耗时 13,857ms 速度 23,093,021 ops 读取 320,000,000 项, 32 线程,耗时 1,950ms 速度 164,102,564 ops 删除 320,000,000 项, 32 线程,耗时 3,359ms 速度 95,266,448 ops 测试 320,000,000 项, 64 线程 赋值 320,000,000 项, 64 线程,耗时 9,648ms 速度 33,167,495 ops 读取 320,000,000 项, 64 线程,耗时 1,974ms 速度 162,107,396 ops 删除 320,000,000 项, 64 线程,耗时 1,907ms 速度 167,802,831 ops 测试 320,000,000 项,256 线程 赋值 320,000,000 项,256 线程,耗时 12,429ms 速度 25,746,238 ops 读取 320,000,000 项,256 线程,耗时 1,907ms 速度 167,802,831 ops 删除 320,000,000 项,256 线程,耗时 2,350ms 速度 136,170,212 ops 使用指定线程测试指定次数 次数 线程 随机读写 批量操作 读取测试 次数 线程 随机读写 批量操作 赋值测试 次数 线程 随机读写 批量操作 删除测试 次数 线程 随机读写 批量操作 累加测试 次数 线程 随机读写 批量操作 已重载。 分布式锁 是否持有锁 实例化 申请锁 锁等待时间,申请加锁时如果遇到冲突则等待的最大时间,单位毫秒 锁过期时间,超过该时间如果没有主动释放则自动释放锁,必须整数秒,单位毫秒 销毁 分布式缓存架构服务。提供基础缓存及队列服务 全局缓存。各功能模块跨进程共享数据,分布式部署时可用Redis,需要考虑序列化成本。默认单机使用内存缓存 应用内本地缓存。默认内存缓存,无需考虑对象序列化成本,缺点是不支持跨进程共享数据 使用默认缓存实例化 获取队列。各功能模块跨进程共用的队列 消息类型 主题 消费组 获取内部队列。默认内存队列 消息类型 主题 申请分布式锁 要锁定的键值。建议加上应用模块等前缀以避免冲突 遇到冲突时等待的最大时间 缓存接口 文档 https://newlifex.com/core/icache 名称 默认缓存时间。默认0秒表示不过期 获取和设置缓存,永不过期 缓存个数 所有键 是否包含缓存项 设置缓存项 过期时间,秒。小于0时采用默认缓存时间 设置缓存项 过期时间 获取缓存项 批量移除缓存项 键集合 清空所有缓存项 设置缓存项有效期 过期时间 获取缓存项有效期 批量获取缓存项 批量设置缓存项 过期时间,秒。小于0时采用默认缓存时间 获取列表 元素类型 获取哈希 元素类型 获取队列 元素类型 获取栈 元素类型 获取Set 添加,已存在时不更新 值类型 过期时间,秒。小于0时采用默认缓存时间 设置新值并获取旧值,原子操作 常常配合Increment使用,用于累加到一定数后重置归零,又避免多线程冲突。 值类型 尝试获取指定键,返回是否包含值。有可能缓存项刚好是默认值,或者只是反序列化失败,解决缓存穿透问题 值类型 值。即使有值也不一定能够返回,可能缓存项刚好是默认值,或者只是反序列化失败 返回是否包含值,即使反序列化失败 获取 或 添加 缓存数据,在数据不存在时执行委托请求数据 过期时间,秒。小于0时采用默认缓存时间 累加,原子操作 变化量 累加,原子操作 变化量 递减,原子操作 变化量 递减,原子操作 变化量 提交变更。部分提供者需要刷盘 申请分布式锁 要锁定的key 锁等待时间,单位毫秒 申请分布式锁 要锁定的key 锁等待时间,申请加锁时如果遇到冲突则等待的最大时间,单位毫秒 锁过期时间,超过该时间如果没有主动释放则自动释放锁,必须整数秒,单位毫秒 失败时是否抛出异常,如果不抛出异常,可通过返回null得知申请锁失败 多线程性能测试 随机读写。顺序,每个线程多次操作一个key;随机,每个线程每次操作不同key 批量操作。默认0不分批,分批仅针对随机读写,对顺序读写的单key操作没有意义 分布式缓存架构服务。提供基础缓存及队列服务 文档 https://newlifex.com/core/icacheprovider 根据实际开发经验,即使在分布式系统中,也有大量的数据是不需要跨进程共享的,因此本接口提供了两级缓存。 进程内缓存使用,可以规避对象序列化成本,跨进程缓存使用。 借助该缓存架构,可以实现各功能模块跨进程共享数据,分布式部署时可用Redis,需要考虑序列化成本。 使用队列时,可根据是否设置消费组来决定使用简单队列还是完整队列。 简单队列(如RedisQueue)可用作命令队列,Topic很多,但几乎没有消息。 完整队列(如RedisStream)可用作消息队列,Topic很少,但消息很多,并且支持多消费组。 全局缓存。各功能模块跨进程共享数据,分布式部署时可用Redis,需要考虑序列化成本。默认单机使用内存缓存 应用内本地缓存。默认内存缓存,无需考虑对象序列化成本,缺点是不支持跨进程共享数据 获取队列。各功能模块跨进程共用的队列 使用队列时,可根据是否设置消费组来决定使用简单队列还是完整队列。 简单队列(如RedisQueue)可用作命令队列,Topic很多,但几乎没有消息。 完整队列(如RedisStream)可用作消息队列,Topic很少,但消息很多,并且支持多消费组。 消息类型。用于消息生产者时,可指定为Object 主题 消费组。未指定消费组时使用简单队列(如RedisQueue),指定消费组时使用完整队列(如RedisStream) 获取内部队列。默认内存队列 消息类型 主题 申请分布式锁 一般实现为Redis分布式锁,申请锁的具体表现为锁定某个key,锁维持时间为msTimeout,遇到冲突时等待msTimeout时间。 如果在等待时间内获得锁,则返回一个IDisposable对象,离开using代码块时自动释放锁。 如果在等待时间内没有获得锁,则抛出异常,需要自己处理锁冲突的情况。 如果希望指定不同的维持时间和等待时间,可以使用接口的方法。 要锁定的键值。建议加上应用模块等前缀以避免冲突 遇到冲突时等待的最大时间,同时也是锁维持的时间 轻量级生产者消费者接口 不一定支持Ack机制;也不支持消息体与消息键分离 元素个数 集合是否为空 生产添加 消费获取一批 消费获取一个 超时。默认0秒,永久等待 异步消费获取一个 超时。单位秒,0秒表示永久等待 异步消费获取一个 超时。单位秒,0秒表示永久等待 取消通知 确认消费 缓存键事件参数 缓存键 默认字典缓存 缓存核心 容量。容量超标时,采用LRU机制删除,默认100_000 定时清理时间,默认60秒 缓存键过期 默认缓存 实例化一个内存字典缓存 销毁 缓存项。原子计数 所有键。实际返回只读列表新实例,数据量较大时注意性能 初始化配置 获取或添加缓存项 值类型 过期时间,秒 是否包含缓存项 添加缓存项,已存在时更新 值类型 过期时间,秒 获取缓存项,不存在时返回默认值 批量移除缓存项 键集合 实际移除个数 清空所有缓存项 设置缓存项有效期 过期时间 设置是否成功 获取缓存项有效期,不存在时返回Zero 添加,已存在时不更新,常用于锁争夺 值类型 过期时间,秒 设置新值并获取旧值,原子操作 值类型 尝试获取指定键,返回是否包含值。有可能缓存项刚好是默认值,或者只是反序列化失败 在 MemoryCache 中,如果某个key过期,在清理之前仍然可以通过TryGet访问,并且更新访问时间,避免被清理。 值类型 值。即使有值也不一定能够返回,可能缓存项刚好是默认值,或者只是反序列化失败 返回是否包含值,即使反序列化失败 获取 或 添加 缓存数据,在数据不存在时执行委托请求数据 过期时间,秒。小于0时采用默认缓存时间 累加,原子操作 变化量 累加,原子操作 变化量 递减,原子操作 变化量 递减,原子操作 变化量 获取列表 获取哈希 获取队列 获取栈 获取Set 基于HashSet,非线程安全 获取 或 添加 缓存项 缓存项 数值 过期时间 是否过期 访问时间 构造缓存项 设置数值和过期时间 过期时间,秒 更新访问时间并返回数值 递增 递增 递减 递减 清理会话计时器 移除过期的缓存项 缓存过期 保存到数据流 从数据流加载 保存到文件 从文件加载 使用指定线程测试指定次数 次数 线程 随机读写 批量操作 生产者消费者 实例化内存队列 实例化内存队列 元素个数 集合是否为空 销毁 生产添加 消费获取 消费一个 超时。默认0秒,永久等待 消费获取,异步阻塞 超时。单位秒,0秒表示永久等待 消费获取,异步阻塞 超时。单位秒,0秒表示永久等待 取消令牌 确认消费 并行哈希集合 主要用于频繁添加删除而又要遍历的场合 是否空集合 元素个数 是否包含元素 尝试添加 尝试删除 字典数据源接口。定义该模型类支持输出名值字典,便于序列化传输 把对象转为名值字典,便于序列化传输 对象池接口 文档 https://newlifex.com/core/object_pool 对象池大小 获取 归还 归还 清空 对象池扩展 文档 https://newlifex.com/core/object_pool 字符串构建器池 归还一个字符串构建器到对象池 是否需要返回结果 归还一个字符串构建器到对象池 是否需要返回结果 字符串构建器池 初始容量。默认100个 最大容量。超过该大小时不进入池内,默认4k 创建 归还 归还 内存流池 归还一个内存流到对象池 是否需要返回结果 归还一个内存流到对象池 是否需要返回结果 内存流池 初始容量。默认1024个 最大容量。超过该大小时不进入池内,默认64k 创建 归还 归还 可空字典。获取数据时如果指定键不存在可返回空而不是抛出异常 实例化一个可空字典 指定比较器实例化一个可空字典 实例化一个可空字典 实例化一个可空字典 获取 或 设置 数据 资源池。支持空闲释放,主要用于数据库连接池和网络连接池 文档 https://newlifex.com/core/object_pool 名称 空闲个数 繁忙个数 最大个数。默认100,0表示无上限 最小个数。默认1 空闲清理时间。最小个数之上的资源超过空闲时间时被清理,默认10s 完全空闲清理时间。最小个数之下的资源超过空闲时间时被清理,默认0s永不清理 基础空闲集合。只保存最小个数,最热部分 扩展空闲集合。保存最小个数以外部分 借出去的放在这 实例化一个资源池 销毁 数值 过期时间 借出 借出时是否可用 申请资源包装项,Dispose时自动归还到池中 归还 归还时是否可用 归还 归还时是否可用 清空已有对象 销毁 创建实例 总请求数 成功数 新创建数 释放数 平均耗时。单位ms 日志 写日志 资源池包装项,自动归还资源到池中 数值 包装项 销毁 轻量级对象池。数组无锁实现,高性能 文档 https://newlifex.com/core/object_pool 内部 1+N 的存储结果,保留最热的一个对象在外层,便于快速存取。 数组具有极快的查找速度,结构体确保没有GC操作。 对象池大小。默认CPU*2,初始化后改变无效 实例化对象池。默认大小CPU*2 获取 归还 归还 清空 创建实例 具有是否已释放和释放后事件的接口 是否已经释放 被销毁时触发事件 具有销毁资源处理的抽象基类 文档 https://newlifex.com/core/disposebase /// <summary>子类重载实现资源释放逻辑时必须首先调用基类方法</summary> /// <param name="disposing">从Dispose调用(释放所有资源)还是析构函数调用(释放非托管资源)。 /// 因为该方法只会被调用一次,所以该参数的意义不太大。</param> protected override void Dispose(bool disposing) { base.OnDispose(disposing); if (disposing) { // 如果是析构函数进来,不执行这里的代码 } } 释放资源 是否已经释放 被销毁时触发事件 释放资源,参数表示是否由Dispose调用。重载时先调用基类方法 析构函数 如果忘记调用Dispose,这里会释放非托管资源。 如果曾经调用过Dispose,因为GC.SuppressFinalize(this),不会再调用该析构函数。 在 .NET 中,析构函数(Finalizer)不应该抛出未捕获的异常。如果析构函数引发未捕获的异常,它将导致应用程序崩溃或进程退出。 销毁助手。扩展方法专用 尝试销毁对象,如果有则调用 机器信息接口 用于扩展MachineInfo功能,具体应用自定义各字段获取方式 初始化静态数据 刷新动态数据 机器信息 文档 https://newlifex.com/core/machine_info 刷新信息成本较高,建议采用单例模式 系统名称 系统版本 产品名称 制造商 处理器型号 硬件唯一标识。取主板编码,部分品牌存在重复 软件唯一标识。系统标识,操作系统重装后更新,Linux系统的machine_id,Android的android_id,Ghost系统存在重复 计算机序列号。适用于品牌机,跟笔记本标签显示一致 主板。序列号或家族信息 磁盘序列号 内存总量。单位Byte 可用内存。单位Byte CPU占用率 网络上行速度。字节每秒,初始化后首次读取为0 网络下行速度。字节每秒,初始化后首次读取为0 温度。单位度 电池剩余。小于1的小数,常用百分比表示 获取 或 设置 扩展属性数据 当前机器信息。默认null,在RegisterAsync后才能使用 机器信息提供者。外部实现可修改部分行为 异步注册一个初始化后的机器信息实例 获取当前信息,如果未设置则等待异步注册结果 从对象容器中获取一个已注册机器信息实例 初始化静态数据。可能是实例化后执行,也可能是Json反序列化后执行 获取实时数据,如CPU、内存、温度 刷新网络速度 获取Linux发行版名称 读取文件信息,分割为字典 通过WMIC命令读取信息 获取设备信息。用于Xamarin 获取设备电量。用于 Xamarin 获取指定目录所在盘可用空间,默认当前目录 返回可用空间,字节,获取失败返回-1 获取指定目录下文件名,支持去掉后缀的去重,主要用于Linux 获取WMI信息 汉字拼音转换类 文档 https://newlifex.com/core/pinyin 二级汉字数组 二级汉字对应拼音数组 取字符的拼音首字母 取字符串各字符的拼音首字母 获取单字拼音 把汉字转换成拼音(全拼) 汉字字符串 转换后的拼音(全拼)字符串 把汉字转换成拼音(全拼) 汉字字符串 转换后的拼音(全拼)字符串 系统设置。提供系统名称、版本等基本设置 文档 https://newlifex.com/core/sysconfig 系统名称 系统版本 显示名称 公司 应用实例。单应用多实例部署时用于唯一标识实例节点 开发者模式 启用 安装时间 加载后触发 系统主程序集 运行时 文档 https://newlifex.com/core/runtime 是否控制台。用于判断是否可以执行一些控制台操作。 是否在容器中运行 是否Mono环境 是否Web环境 是否Windows环境 是否Linux环境 是否OSX环境 系统启动以来的毫秒数 获取环境变量。不区分大小写 获取环境变量集合。不区分大小写 阿波罗配置中心提供者 命名空间。Apollo专用,多个命名空间用逗号或分号隔开 已重载。输出友好信息 设置阿波罗服务端 命名空间。多个命名空间用逗号或分号隔开 从本地配置文件读取阿波罗地址,并得到阿波罗配置提供者 阿波罗配置文件名,默认appsettings.json 加载路径,默认apollo 获取所有配置 设置配置项,保存到服务端 命令分析器 不区分大小写 去除前导横杠。默认true 分析参数数组,得到名值字段 去除两头的双引号 复合配置提供者。常用于本地配置与网络配置的混合 日志提供者集合 为了线程安全,使用数组 名称 根元素 所有键 是否新的配置文件 返回获取配置的委托 实例化 添加 获取 或 设置 配置值 查找配置项。可得到子级和配置 配置名 从数据源加载数据到配置树 保存配置树到数据源 加载配置到模型 模型。可通过实现IConfigMapping接口来自定义映射配置到模型实例 路径。配置树位置,配置中心等多对象混合使用时 保存模型实例 模型 模型实例 路径。配置树位置 绑定模型,使能热更新,配置存储数据改变时同步修改模型属性 模型。可通过实现IConfigMapping接口来自定义映射配置到模型实例 模型实例 是否自动更新。默认true 命名空间。配置树位置,配置中心等多对象混合使用时 绑定模型,使能热更新,配置存储数据改变时同步修改模型属性 模型。可通过实现IConfigMapping接口来自定义映射配置到模型实例 模型实例 命名空间。配置树位置,配置中心等多对象混合使用时 配置改变时执行的委托 通知绑定对象,配置数据有改变 配置改变事件。执行了某些动作,可能导致配置数据发生改变时触发 配置文件基类 标准用法:TConfig.Current 配置实体类通过特性指定配置文件路径。 Current将加载配置文件,如果文件不存在或者加载失败,将实例化一个对象返回。 当前使用的提供者 当前实例。通过置空可以使其重新加载。 是否新的配置文件 从配置文件中读取完成后触发 保存到配置文件中去 配置特性 声明配置模型使用哪一种配置提供者,以及所需要的文件名和分类名。 如未指定提供者,则使用全局默认,此时将根据全局代码配置或环境变量配置使用不同提供者,实现配置信息整体转移。 提供者。内置ini/xml/json/http,一般不指定,使用全局默认 配置名。可以是文件名或分类名 指定配置名 配置名。可以是文件名或分类名 提供者。内置ini/xml/json/http,一般不指定,使用全局默认 http配置特性 声明配置模型使用哪一种配置提供者,以及所需要的文件名和分类名。 如未指定提供者,则使用全局默认,此时将根据全局代码配置或环境变量配置使用不同提供者,实现配置信息整体转移。 应用标识 服务操作 应用标识 应用密钥 作用域。获取指定作用域下的配置值,生产、开发、测试 等 本地缓存配置数据。即使网络断开,仍然能够加载使用本地数据,默认Encrypted 指定配置名 服务器地址 服务操作 配置名。可以是文件名或分类名 应用标识 应用密钥 作用域。获取指定作用域下的配置值,生产、开发、测试 等 本地缓存配置数据。即使网络断开,仍然能够加载使用本地数据,默认Encrypted 配置数据缓存等级 不缓存 Json格式缓存 加密缓存 配置助手 查找配置项。可得到子级和配置 添加子节点 查找或添加子节点 设置节点值。格式化友好字符串 映射配置树到实例公有属性 数据源 模型 提供者 从实例公有属性映射到配置树 文件配置提供者 每个提供者实例对应一个配置文件,支持热更新 文件名。最高优先级,优先于模型特性指定的文件名 更新周期。默认5秒 销毁 已重载。输出友好信息 初始化 加载配置 读取配置文件 文件名 配置段 保存配置树到数据源 保存模型实例 模型 模型实例 路径。配置树位置 写入配置文件 文件名 配置段 获取字符串形式 配置段 绑定模型,使能热更新,配置存储数据改变时同步修改模型属性 模型 模型实例 是否自动更新。默认true 路径。配置树位置,配置中心等多对象混合使用时 获取配置委托。便于集成配置中心 配置中心提供者 服务器 服务操作 默认:Config/GetAll 应用标识 应用密钥 实例。应用可能多实例部署,ip@proccessid 作用域。获取指定作用域下的配置值,生产、开发、测试 等 本地缓存配置数据。即使网络断开,仍然能够加载使用本地数据,默认Encrypted 更新周期。默认60秒,0秒表示不做自动更新 Api客户端 服务器信息。配置中心最后一次接口响应,包含配置数据以外的其它内容 需要忽略改变的键。这些键的改变不产生改变事件 实例化Http配置提供者,对接星尘和阿波罗等配置中心 销毁 已重载。输出友好信息 获取客户端 获取所有配置 设置配置项,保存到服务端 初始化提供者,如有必要,此时加载缓存文件 加载配置字典为配置树 加载配置 保存配置树到数据源 绑定模型,使能热更新,配置存储数据改变时同步修改模型属性 模型 模型实例 是否自动更新。默认true 路径。配置树位置,配置中心等多对象混合使用时 定时器 定时刷新配置 配置映射接口。用于自定义映射配置树到当前对象 整体配置数据改变时触发调用该接口,但不表示当前对象所绑定路径的配置数据有改变,用户需要自己判断所属配置数据是否已改变。 映射配置树到当前对象 配置提供者 配置数据段 配置提供者 建立树状配置数据体系,以分布式配置中心为核心,支持基于key的索引读写,也支持Load/Save/Bind的实体模型转换。 key索引支持冒号分隔的多层结构,在配置中心中不同命名空间使用不同提供者实例,在文件配置中不同文件使用不同提供者实例。 一个配置类,支持从不同持久化提供者读取,可根据需要选择配置持久化策略。 例如,小系统采用ini/xml/json文件配置,分布式系统采用配置中心。 可通过实现IConfigMapping接口来自定义映射配置到模型实例。 名称 根元素 所有键 是否新的配置文件 获取 或 设置 配置值 配置名,支持冒号分隔的多级名称 查找配置项。可得到子级和配置 配置名 配置改变事件。执行了某些动作,可能导致配置数据发生改变时触发 返回获取配置的委托 从数据源加载数据到配置树 保存配置树到数据源 加载配置到模型 模型。可通过实现IConfigMapping接口来自定义映射配置到模型实例 路径。配置树位置,配置中心等多对象混合使用时 保存模型实例 模型 模型实例 路径。配置树位置,配置中心等多对象混合使用时 绑定模型,使能热更新,配置存储数据改变时同步修改模型属性 模型。可通过实现IConfigMapping接口来自定义映射配置到模型实例 模型实例 是否自动更新。默认true 命名空间。配置树位置,配置中心等多对象混合使用时 绑定模型,使能热更新,配置存储数据改变时同步修改模型属性 模型。可通过实现IConfigMapping接口来自定义映射配置到模型实例 模型实例 命名空间。配置树位置,配置中心等多对象混合使用时 配置改变时执行的委托 配置提供者基类 同时也是基于Items字典的内存配置提供者。 名称 根元素 所有键 已使用的键 缺失的键 返回获取配置的委托 配置改变事件。执行了某些动作,可能导致配置数据发生改变时触发 是否新的配置文件 构造函数 获取 或 设置 配置值 查找配置项。可得到子级和配置 查找配置项,可指定是否创建 配置提供者可以重载该方法以实现增强功能。例如星尘配置从注册中心读取数据 初始化提供者 从数据源加载数据到配置树 加载配置到模型 模型。可通过实现IConfigMapping接口来自定义映射配置到模型实例 路径。配置树位置,配置中心等多对象混合使用时 保存配置树到数据源 保存模型实例 模型 模型实例 路径。配置树位置 绑定模型,使能热更新,配置存储数据改变时同步修改模型属性 模型。可通过实现IConfigMapping接口来自定义映射配置到模型实例 模型实例 是否自动更新。默认true 命名空间。配置树位置,配置中心等多对象混合使用时 绑定模型,使能热更新,配置存储数据改变时同步修改模型属性 模型。可通过实现IConfigMapping接口来自定义映射配置到模型实例 模型实例 命名空间。配置树位置,配置中心等多对象混合使用时 配置改变时执行的委托 通知绑定对象,配置数据有改变 默认提供者。默认xml 注册提供者 根据指定名称创建提供者 如果是文件名,根据后缀确定使用哪一种提供者。 配置对象 配置名 配置值 注释 子级 获取 或 设置 配置值 配置名,支持冒号分隔的多级名称 配置项 配置名 配置值 注释 子级 获取 或 设置 配置值 已重载。 Ini文件配置提供者 支持从不同配置文件加载到不同配置模型 初始化 读取配置文件 文件名 配置段 获取字符串形式 配置段 Json文件配置提供者 支持从不同配置文件加载到不同配置模型 加载本地配置文件得到配置提供者 配置文件名,默认appsettings.json 初始化 读取配置文件 文件名 配置段 获取字符串形式 配置段 字典映射到配置树 配置树映射到字典 清理json字符串中的注释,避免json解析错误 Xml文件配置提供者 支持从不同配置文件加载到不同配置模型 根元素名称 初始化 读取配置文件 文件名 配置段 获取字符串形式 配置段 数据行 文档 https://newlifex.com/core/dbtable 构造数据行 数据行 文档 https://newlifex.com/core/dbtable 构造数据行 数据表 行索引 基于列索引访问 基于列名访问 读取指定行的字段值 数据表 文档 https://newlifex.com/core/dbtable 数据列 数据列类型 数据行 总行数 读取数据 读取头部 读取数据 数据读取器 要读取的字段序列 读取数据 取消通知 读取数据 数据读取器 要读取的字段序列 取消通知 从DataTable读取数据 数据表 转换为DataTable 转换为DataTable 数据表 从数据流读取 读取头部 读取数据 读取 从文件加载 是否压缩 写入数据流 写入头部到数据流 写入数据部分到数据流 写入数据部分到数据流 要写入的字段序列 转数据包 保存到文件 是否压缩 转Json字符串 是否缩进。默认false 是否写空值。默认true 是否驼峰命名。默认false 转为字典数组形式 转Xml字符串 以Xml格式写入数据流中 保存到Csv文件 从Csv文件加载 写入模型列表 数据表转模型列表。普通反射,便于DAL查询后转任意模型列表 读取指定行的字段值 尝试读取指定行的字段值 根据名称找字段序号 数据集 克隆 获取数据行 获取枚举 经纬坐标的一维编码表示 文档 https://newlifex.com/core/geo_hash 一维编码表示一个矩形区域,前缀表示更大区域,例如北京wx4fbzdvs80包含在wx4fbzdvs里面。 这个特性可以用于附近地点搜索。 GeoHash编码位数及距离关系: 1位,+-2500km; 2位,+-630km; 3位,+-78km; 4位,+-20km; 5位,+-2.4km; 6位,+-610m; 7位,+-76m; 8位,+-19m; 9位,+-2m; 编码坐标点为GeoHash字符串 经度 纬度 字符个数。默认9位字符编码,精度2米 解码GeoHash字符串为坐标点 数据帧接口。用于网络通信领域,定义数据帧的必要字段 原始数据包 远程地址 解码后的消息 用户自定义数据 具有可读写的扩展数据 仅限于扩展属性,不包括基本属性,区别于 IModel 数据项 设置 或 获取 数据项 具有扩展数据字典 仅限于扩展属性,不包括基本属性 扩展数据键集合 具有扩展数据字典 仅限于扩展属性,不包括基本属性 数据过滤器 下一个过滤器 对封包执行过滤器 过滤器上下文 封包 过滤器助手 在链条里面查找指定类型的过滤器 数据过滤器基类 下一个过滤器 对封包执行过滤器 执行过滤 返回是否执行下一个过滤器 模型数据接口,支持索引器读写属性 可借助反射取得属性列表成员,从而对实体模型属性进行读写操作,避免反射带来的负担。 常用于WebApi模型类以及XCode数据实体类,也用于魔方接口拷贝。 逐步替代 IExtend 的大部分使用场景 设置 或 获取 数据项 范围 开始,包含 结束,不包含 已重载 数据包编码器接口 数值转数据包 数值对象 数据包转对象 数据包 目标类型 默认数据包编码器。基础类型直接转,复杂类型Json序列化 解码出错时抛出异常。默认false不抛出异常,仅返回默认值 数值转数据包 数据包转对象 数据包。表示数据区Data的指定范围(Offset, Count)。 文档 https://newlifex.com/core/packet 设计于.NET2.0时代,功能上类似于NETCore的Span/Memory。 Packet的设计目标就是网络库零拷贝,所以Slice切片是其最重要功能。 数据 偏移 长度 下一个链式包 总长度 根据数据区实例化 根据数组段实例化 从可扩展内存流实例化,尝试窃取内存流内部的字节数组,失败后拷贝 因数据包内数组窃取自内存流,需要特别小心,避免多线程共用。常用于内存流转数据包,而内存流不再使用 获取/设置 指定位置的字节 设置新的数据区 数据区 偏移 字节个数 截取子数据区 相对偏移 字节个数 查找目标数组 目标数组 本数组起始偏移 本数组搜索个数 附加一个包到当前包链的末尾 返回字节数组。无差别复制,一定返回新数组 从封包中读取指定数据区,读取全部时直接返回缓冲区,以提升性能 相对于数据包的起始位置,实际上是数组的Offset+offset 字节个数 返回数据段 返回数据段集合 获取封包的数据流形式 把封包写入到数据流 把封包写入到目标数组 目标数组 目标数组的偏移量 目标数组的字节数 异步复制到目标数据流 异步复制到目标数据流 取消通知 深度克隆一份数据包,拷贝数据区 以字符串表示 字符串编码,默认URF-8 以十六进制编码表示 最大显示多少个字节。默认-1显示全部 分隔符 分组大小,为0时对每个字节应用分隔符,否则对每个分组使用 转为Base64编码 读取无符号短整数 读取无符号整数 重载类型转换,字节数组直接转为Packet对象 重载类型转换,一维数组直接转为Packet对象 重载类型转换,字符串直接转为Packet对象 已重载 分页参数信息。可携带统计和数据权限扩展查询等信息 文档 https://newlifex.com/core/page_parameter 获取 或 设置 排序字段,前台接收,便于做SQL安全性校验 一般用于接收单个排序字段,可以带上Asc/Desc,这里会自动拆分。 极少数情况下,前端需要传递多个字段排序,这时候可以使用OrderBy。 OrderBy优先级更高,且支持手写复杂排序语句(不做SQL安全性校验)。 如果设置Sort,OrderBy将被清空。 获取 或 设置 是否降序 获取 或 设置 页面索引。从1开始,默认1 如果设定了开始行,分页时将不再使用PageIndex 获取 或 设置 页面大小。默认20,若为0表示不分页 获取 或 设置 总记录数 获取 页数 获取 或 设置 自定义排序字句。常用于用户自定义排序,不经过SQL安全性校验 OrderBy优先级更高,且支持手写复杂排序语句(不做SQL安全性校验)。 如果设置Sort,OrderBy将被清空。 获取 或 设置 开始行 如果设定了开始行,分页时将不再使用PageIndex 获取 或 设置 是否获取总记录数,默认false 获取 或 设置 状态。用于传递统计、扩展查询等用户数据 获取 或 设置 是否获取统计,默认false 实例化分页参数 通过另一个分页参数来实例化当前分页参数 从另一个分页参数拷贝到当前分页参数 获取表示分页参数唯一性的键值,可用作缓存键 环形缓冲区。用于协议组包设计 容量 头指针。写入位置 尾指针。读取位置 数据长度 使用默认容量1024来初始化 实例化环形缓冲区 容量。合理的容量能够减少扩容 扩容,确保容量 写入数据 数据 偏移量 个数 读取数据 数据 偏移量 个数 雪花算法。分布式Id,业务内必须确保单例 文档 https://newlifex.com/core/snow_flake 使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增。 1bit保留 + 41bit时间戳 + 10bit机器 + 12bit序列号 内置自动选择机器workerId,IP+进程+线程,无法绝对保证唯一,从而导致整体生成的雪花Id有一定几率重复。 如果想要绝对唯一,建议在外部设置唯一的workerId,再结合单例使用,此时确保最终生成的Id绝对不重复! 高要求场合,推荐使用Redis自增序数作为workerId,在大型分布式系统中亦能保证绝对唯一。 已提供JoinCluster方法,用于把当前对象加入集群,确保workerId唯一。 务必请保证Snowflake对象的唯一性,Snowflake确保本对象生成的Id绝对唯一,但如果有多个Snowflake对象,可能会生成重复Id。 特别在使用XCode等数据中间件时,要确保每张表只有一个Snowflake实例。 开始时间戳。首次使用前设置,否则无效,默认1970-1-1 该时间戳默认已带有时区偏移,不管是为本地时间还是UTC时间生成雪花Id,都是一样的时间大小。 默认值本质上就是UTC 1970-1-1,转本地时间是为了方便解析雪花Id时得到的时间就是本地时间,最大兼容已有业务。 在星尘和IoT的自动分表场景中,一般需要用本地时间来作为分表依据,所以默认值是本地时间。 机器Id,取10位 内置默认取IP+进程+线程,不能保证绝对唯一,要求高的场合建议外部保证workerId唯一。 一般借助Redis自增序数作为workerId,确保绝对唯一。 如果应用接入星尘,将自动从星尘配置中心获取workerId,确保全局唯一。 序列号,取12位。进程内静态,避免多个实例生成重复Id 全局机器Id。若设置,所有雪花实例都将使用该Id,可以由星尘配置中心提供本应用全局唯一机器码,且跨多环境唯一 workerId分配集群。配置后可确保所有实例化的雪花对象得到唯一workerId,建议使用Redis 获取下一个Id 基于当前时间,转StartTimestamp所属时区后,生成Id 获取指定时间的Id,带上节点和序列号。可用于根据业务时间构造插入Id 基于指定时间,转StartTimestamp所属时区后,生成Id。 如果为指定毫秒时间生成多个Id(超过4096),则可能重复。 时间 获取指定时间的Id,传入唯一业务id(取模为10位)。可用于物联网数据采集,每1024个传感器为一组,每组每毫秒多个Id 基于指定时间,转StartTimestamp所属时区后,生成Id。 在物联网数据采集中,数据分析需要,更多希望能够按照采集时间去存储。 为了避免主键重复,可以使用传感器id作为workerId。 uid需要取模为10位,即按1024分组,每组每毫秒最多生成4096个Id。 如果为指定分组在特定毫秒时间生成多个Id(超过4096),则可能重复。 时间 唯一业务id。例如传感器id 获取指定时间的Id,传入唯一业务id(22位)。可用于物联网数据采集,每4194304个传感器一组,每组每毫秒1个Id 基于指定时间,转StartTimestamp所属时区后,生成Id。 在物联网数据采集中,数据分析需要,更多希望能够按照采集时间去存储。 为了避免主键重复,可以使用传感器id作为workerId。 再配合upsert写入数据,如果同一个毫秒内传感器有多行数据,则只会插入一行。 如果为指定业务id在特定毫秒时间生成多个Id(超过1个),则可能重复。 时间 唯一业务id。例如传感器id 时间转为Id,不带节点和序列号。可用于构建时间片段查询 基于指定时间,转StartTimestamp所属时区后,生成不带WorkerId和序列号的Id。 一般用于构建时间片段查询,例如查询某个时间段内的数据,把时间片段转为雪花Id片段。 时间 解析雪花Id,得到时间、WorkerId和序列号 其中的时间是StartTimestamp所属时区的时间。 时间 节点 序列号 把输入时间转为开始时间戳的类型,便于相减 加入集群。由集群统一分配WorkerId,确保唯一,从而保证生成的雪花Id绝对唯一 时序点,用于时序数据计算 时间 数值 已重载 泛型事件参数 参数 使用参数初始化 弹出 泛型事件参数 参数 参数2 使用参数初始化 弹出 泛型事件参数 参数 参数2 参数3 使用参数初始化 弹出 泛型事件参数 参数 参数2 参数3 参数4 使用参数初始化 弹出 弱引用Action 常见的事件和委托,都包括两部分:对象和方法,当然如果委托到静态方法上,对象是为空的。 如果把事件委托到某个对象的方法上,同时就间接的引用了这个对象,导致其一直无法被回收,从而造成内存泄漏。 弱引用Action,原理就是把委托拆分,然后弱引用对象部分,需要调用委托的时候,再把对象“拉”回来,如果被回收了,就没有必要再调用它的方法了。 文档 https://newlifex.com/core/weak_action 目标对象。弱引用,使得调用方对象可以被GC回收 委托方法 经过包装的新的委托 取消注册的委托 是否只使用一次,如果只使用一次,执行委托后马上取消注册 是否可用 实例化 目标对象 目标方法 实例化 目标对象 目标方法 取消注册回调 是否一次性事件 实例化 事件处理器 使用事件处理器、取消注册回调、是否一次性事件来初始化 事件处理器 取消注册回调 是否一次性事件 调用委托 把弱引用事件处理器转换为普通事件处理器 已重载 X组件异常 初始化 初始化 初始化 初始化 初始化 初始化 异常事件参数 发生异常时进行的动作 异常 实例化 异常助手 是否对象已被释放异常 数据位助手 设置数据位 数值 设置数据位 数值 设置数据位 数值 获取数据位 数值 获取数据位 数值 获取数据位 数值 枚举类型助手类 枚举变量是否包含指定标识 枚举变量 要判断的标识 设置标识位 数值 获取枚举字段的注释 数值 获取枚举类型的所有字段注释 获取枚举类型的所有字段注释 停止话音播报 字符串助手类 文档 https://newlifex.com/core/string_helper 忽略大小写的字符串相等比较,判断是否与任意一个待比较字符串相等 字符串 待比较字符串数组 忽略大小写的字符串开始比较,判断是否与任意一个待比较字符串开始 字符串 待比较字符串数组 忽略大小写的字符串结束比较,判断是否以任意一个待比较字符串结束 字符串 待比较字符串数组 指示指定的字符串是 null 还是 String.Empty 字符串 字符串 是否空或者空白字符串 字符串 拆分字符串,过滤空格,无效时返回空数组 字符串 分组分隔符,默认逗号分号 拆分字符串成为整型数组,默认逗号分号分隔,无效时返回空数组 过滤空格、过滤无效、不过滤重复 字符串 分组分隔符,默认逗号分号 拆分字符串成为不区分大小写的可空名值字典。逗号分组,等号分隔 字符串 名值分隔符,默认等于号 分组分隔符,默认分号 去掉括号 在.netCore需要区分该部分内容 把一个列表组合成为一个字符串,默认逗号分隔 组合分隔符,默认逗号 把一个列表组合成为一个字符串,默认逗号分隔 组合分隔符,默认逗号 把对象转为字符串的委托 追加分隔符字符串,忽略开头,常用于拼接 字符串构造者 分隔符 字符串转数组 字符串 编码,默认utf-8无BOM 格式化字符串。特别支持无格式化字符串的时间参数 格式字符串 参数 指定输入是否匹配目标表达式,支持*匹配 匹配表达式 输入字符串 字符串比较方式 Returns a value indicating whether a specified character occurs within this string. The character to seek. if the parameter occurs within this string; otherwise, . Splits a string into substrings based on the characters in an array. You can specify whether the substrings include empty array elements. A character array that delimits the substrings in this string, an empty array that contains no delimiters, or . to omit empty array elements from the array returned; or to include empty array elements in the array returned. An array whose elements contain the substrings in this string that are delimited by one or more characters in . For more information, see the Remarks section. is not one of the values. 确保字符串以指定的另一字符串开始,不区分大小写 字符串 确保字符串以指定的另一字符串结束,不区分大小写 字符串 从当前字符串开头移除另一字符串,不区分大小写,循环多次匹配前缀 当前字符串 另一字符串 从当前字符串结尾移除另一字符串,不区分大小写,循环多次匹配后缀 当前字符串 另一字符串 修剪不可见字符。仅修剪ASCII,不包含Unicode 从字符串中检索子字符串,在指定头部字符串之后,指定尾部字符串之前 常用于截取xml某一个元素等操作 目标字符串 头部字符串,在它之后 尾部字符串,在它之前 搜索的开始位置 位置数组,两个元素分别记录头尾位置 根据最大长度截取字符串,并允许以指定空白填充末尾 字符串 截取后字符串的最大允许长度,包含后面填充 需要填充在后面的字符串,比如几个圆点 从当前字符串开头移除另一字符串以及之前的部分 当前字符串 另一字符串 从当前字符串结尾移除另一字符串以及之后的部分 当前字符串 另一字符串 编辑距离搜索,从词组中找到最接近关键字的若干匹配项 算法代码由@Aimeast 独立完成。http://www.cnblogs.com/Aimeast/archive/2011/09/05/2167844.html 关键字 词组 编辑距离 又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 算法代码由@Aimeast 独立完成。http://www.cnblogs.com/Aimeast/archive/2011/09/05/2167844.html 最长公共子序列搜索,从词组中找到最接近关键字的若干匹配项 算法代码由@Aimeast 独立完成。http://www.cnblogs.com/Aimeast/archive/2011/09/05/2167844.html 最长公共子序列问题是寻找两个或多个已知数列最长的子序列。 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。 The longest common subsequence (LCS) problem is to find the longest subsequence common to all sequences in a set of sequences (often just two). Note that subsequence is different from a substring, see substring vs. subsequence. It is a classic computer science problem, the basis of diff (a file comparison program that outputs the differences between two files), and has applications in bioinformatics. 算法代码由@Aimeast 独立完成。http://www.cnblogs.com/Aimeast/archive/2011/09/05/2167844.html 多个关键字。长度必须大于0,必须按照字符串长度升序排列。 根据列表项成员计算距离 在列表项中进行模糊搜索 模糊匹配 模糊匹配 模糊匹配 列表项 关键字 匹配字符串选择 获取个数 权重阀值 调用语音引擎说出指定话 异步调用语音引擎说出指定话。可能导致后来的调用打断前面的语音 启用语音提示 语音提示操作 停止所有语音播报 以隐藏窗口执行命令行 文件名 命令参数 等待毫秒数 进程输出内容。默认为空时输出到日志 进程退出时执行 工作目录 进程退出代码 在Shell上执行命令。目标进程不是子进程,不会随着当前进程退出而退出 文件名 参数 工作目录。目标进程的当前目录 控制器处理器 控制器类型 处理请求 支持优化Dns解析的HttpClient处理器 DNS解析器 实例化一个支持APM的HttpClient处理器 发送请求 表单部分 名称 内容部署 内容类型 文件名 数据 长度 打开数据读取流 保存到文件 Http请求响应基类 协议版本 内容长度 内容类型 请求或响应的主体部分 主体长度 是否已完整。头部未指定长度,或指定长度后内容已满足 头部集合 获取/设置 头部 快速验证协议头,剔除非HTTP协议。仅排除,验证通过不一定就是HTTP协议 分析请求头 分析第一行 创建请求响应包 创建头部 Http帮助类 性能跟踪器 Http过滤器 默认用户浏览器UserAgent。用于内部创建的HttpClient请求 设置浏览器UserAgent。默认使用应用名和版本 为HttpClient创建Socket处理器,默认设置连接生命为5分钟,有效反映DNS网络更改 PooledConnectionLifetime 属性定义池中的最大连接生存期,从建立连接的时间跟踪其年龄,而不考虑其空闲时间或活动时间。 在主动用于服务请求时,连接不会被拆毁。此生存期非常有用,以便定期重新建立连接,以便更好地反映 DNS 或其他网络更改。 是否使用代理 是否使用Cookie 创建请求包 创建响应包 分析头部 异步提交Json Http客户端 请求资源地址 数据 附加头部 取消通知 同步提交Json Http客户端 请求资源地址 数据 附加头部 异步提交Xml Http客户端 请求资源地址 数据 附加头部 取消通知 同步提交Xml Http客户端 请求资源地址 数据 附加头部 异步提交表单,名值对传输字典参数 Http客户端 请求资源地址 名值对数据。匿名对象或字典 附加头部 取消通知 同步提交表单,名值对传输字典参数 Http客户端 请求资源地址 名值对数据。匿名对象或字典 附加头部 异步提交多段表单数据,含文件流 Http客户端 请求资源地址 名值对数据。匿名对象或字典,支持文件流 取消通知 同步获取字符串 Http客户端 请求资源地址 附加头部 下载文件 Http客户端 请求资源地址 目标文件名 下载文件 Http客户端 请求资源地址 目标文件名 取消通知 上传文件以及表单数据 Http客户端 请求资源地址 目标文件名 其它表单数据 取消通知 从队列消费消息并推送到WebSocket客户端 WebSocket实例 队列 数据处理委托 取消通知源 从队列消费消息并推送到WebSocket客户端 WebSocket实例 缓存主机 主题 取消通知源 从队列消费消息并推送到WebSocket客户端 WebSocket实例 队列 数据处理委托 取消通知源 从队列消费消息并推送到WebSocket客户端 WebSocket实例 缓存主机 主题 取消通知源 阻塞等待WebSocket关闭 WebSocket实例 数据处理委托 取消通知源 Http请求 Http方法 资源路径 目标主机 保持连接 文件集合 分析第一行 快速分析请求头,只分析第一行 创建头部 分析表单数据 已重载。 Http响应 状态码 状态描述 分析第一行 创建请求响应包 创建头部 验证,如果失败则抛出异常 设置结果,影响Body和ContentType 已重载。 Http服务器 Http响应头Server名称 路由映射 实例化 为会话创建网络数据处理器。可作为业务处理实现,也可以作为前置协议解析 映射路由处理器 映射路由处理器 映射路由处理器 映射路由处理器 映射路由处理器 映射路由处理器 映射路由处理器 映射控制器 映射控制器 映射静态文件 映射路径,如 /js 内容目录,如 /wwwroot/js 匹配处理器 Http会话 请求 最大请求长度。单位字节,默认1G 忽略的头部 支持作为标签数据的内容类型 建立连接时初始化会话 会话 处理客户端发来的数据 收到新的Http请求,只有头部 处理Http请求 准备请求参数 支持APM跟踪的HttpClient处理器 APM跟踪器 异常过滤器。仅记录满足条件的异常,默认空记录所有异常 实例化一个支持APM的HttpClient处理器 发送请求 Http上下文 请求 响应 连接会话 WebSocket连接 执行路径 处理器 服务提供者 请求参数 默认Http上下文 请求 响应 连接会话 WebSocket连接 执行路径 处理器 服务提供者 请求参数 实例化 当前上下文 Http过滤器,拦截请求前后 请求前 客户端 请求消息 状态数据 取消通知 获取响应后 客户端 响应消息 状态数据 取消通知 发生错误时 客户端 异常 状态数据 取消通知 Http处理器 处理请求 Http请求处理委托 委托Http处理器 委托 处理请求 复杂调用 静态文件处理器 映射路径 内容目录 处理请求 迷你Http客户端。支持https和302跳转 基于Tcp连接设计,用于高吞吐的HTTP通信场景,功能较少,但一切均在掌控之中。 单个实例使用单个连接,建议外部使用ObjectPool建立连接池。 客户端 基础地址 保持连接 超时时间。默认15s 缓冲区大小。接收缓冲区默认64*1024 性能追踪 实例化 实例化 销毁 获取网络数据流 异步请求 异步发出请求,并接收响应 读取分片,返回链式Packet 异步获取。连接池操作 地址 异步调用,等待返回结果 返回类型 Get/Post 服务操作 参数 日志 写日志 Http令牌过滤器,请求前加上令牌,请求后拦截401/403 用户 密钥 客户端唯一标识。一般是IP@进程 安全密钥。keyName$keyValue 公钥,用于RSA加密用户密码,在通信链路上保护用户密码安全,可以写死在代码里面。 密钥前面可以增加keyName,形成keyName$keyValue,用于向服务端指示所使用的密钥标识,方便未来更换密钥。 申请令牌动作名,默认 OAuth/Token 令牌信息 令牌有效期 清空令牌的错误码。默认401和403 实例化令牌过滤器 请求前 客户端 请求消息 状态数据 取消通知 发起密码认证请求 取消通知 发起刷新令牌请求 取消通知 编码密码,在传输中保护安全,一般使用RSA加密 获取响应后 客户端 响应消息 状态数据 取消通知 发生错误时 客户端 异常 状态数据 取消通知 WebSocket消息处理 WebSocket会话管理 是否还在连接 消息处理器 Http上下文 版本 活跃时间 WebSocket 握手 处理WebSocket数据包,不支持超大数据帧(默认8k) 发送消息 发送文本消息 向所有连接发送消息 想所有连接发送文本消息 发送关闭连接 WebSocket处理器 处理请求 处理消息 WebSocket消息类型 附加数据 文本数据 二进制数据 连接关闭 心跳 心跳响应 WebSocket消息 消息是否结束 消息类型 加密数据的掩码 负载数据 关闭状态。仅用于Close消息 关闭状态描述。仅用于Close消息 读取消息 把消息转为封包 Csv文件轻量级数据库 文档 https://newlifex.com/core/csv_db 适用于大量数据需要快速存储、快速查找,很少修改和删除的场景。 在桌面客户端中,关系型数据库SQLite很容易因非法关机而损坏,本数据库能跳过损坏行,自动恢复。 文件名 文件编码,默认utf8 实体比较器 实例化Csv文件数据库 实例化Csv文件数据库 强行写入数据 要写入的数据 是否附加在尾部 尾部插入数据,性能极好 尾部插入数据,性能极好 删除数据,性能很差,全部读取剔除后保存 删除数据,性能很差,全部读取剔除后保存 删除满足条件的数据,性能很差,全部读取剔除后保存 清空数据。只写头部 更新指定数据行,性能很差,全部读取替换后保存 设置(添加或更新)指定数据行,性能很差,全部读取替换后保存 查找指定数据行 获取满足条件的第一行数据 获取所有数据行 获取满足条件的数据行,性能好,顺序查找 获取数据行数,性能极好,文件行数(除头部) Csv文件 文档 https://newlifex.com/core/csv_file 支持整体读写以及增量式读写,目标是读写超大Csv文件 文件编码 分隔符。默认逗号 数据流实例化 数据流实例化 保留打开 Csv文件实例化 销毁 销毁 读取一行 读取所有行 写入全部 写入一行 写入一行 异步写入一行 构建一行 文件存储客户端 使用方式,可以引用sdk,也可以直接把 EasyClient 类抠出来使用。 服务端地址 应用标识 应用密钥 基础控制器路径。默认/io/ 是否支持获取文件直接访问Url 是否支持删除 是否支持搜索 实例化 指定服务提供者来实例化文件存储客户端,可对接配置中心或注册中心 服务提供者 配置名。默认指向注册中心的EasyIO服务 获取客户端 上传对象 对象标识。支持斜杠目录结构 根据Id获取对象 对象标识。支持斜杠目录结构 获取对象下载Url 对象标识。支持斜杠目录结构 删除文件对象 对象文件名 搜索文件 匹配模式。如/202304/*.jpg 开始序号。0开始 最大个数 性能追踪 日志 写日志 轻量级Excel读取器,仅用于导入数据 文档 https://newlifex.com/core/excel_reader 仅支持xlsx格式,本质上是压缩包,内部xml。 可根据xml格式扩展读取自己想要的内容。 文件名 工作表 实例化读取器 实例化读取器 销毁 逐行读取数据,第一行很可能是表头 工作表名。一般是sheet1/sheet2/sheet3,默认空,使用第一个数据表 对象信息接口。代表文件存储对象,或者磁盘文件,也可以是目录 名称 大小 时间 是否目录 数据 对象信息。代表文件存储对象,或者磁盘文件,也可以是目录 名称 大小 时间 是否目录 数据 对象存储接口 可对接阿里云,文档 https://newlifex.com/core/oss 可对接EasyIO 有的OSS实现,在地址栏增加目录结构,而有的在对象名增加目录。 服务器。某些OSS在域名前或地址后增加BucketName 应用标识 应用密钥 是否支持获取文件直接访问Url 是否支持删除 是否支持搜索 获取文件对象 对象文件名 获取文件直接访问Url 对象文件名 上传文件对象 对象文件名。可以为空,此时自动生成文件名 数据内容 可能是自动生成的新文件名 删除文件对象 对象文件名 搜索文件 匹配模式。如/202304/*.jpg 开始序号。0开始 最大个数 IO工具类 文档 https://newlifex.com/core/io_helper 最大安全数组大小。超过该大小时,读取数据操作将强制失败,默认1024*1024 这是一个保护性设置,避免解码错误数据时读取了超大数组导致应用崩溃。 需要解码较大二进制数据时,可以适当放宽该阈值。 压缩数据流 输入流 输出流。如果不指定,则内部实例化一个内存流 返回输出流,注意此时指针位于末端 解压缩数据流 Deflate算法,如果是ZLIB格式,则前面多两个字节,解压缩之前去掉,RocketMQ中有用到 输入流 输出流。如果不指定,则内部实例化一个内存流 返回输出流,注意此时指针位于末端 压缩字节数组 字节数组 解压缩字节数组 Deflate算法,如果是ZLIB格式,则前面多两个字节,解压缩之前去掉,RocketMQ中有用到 字节数组 压缩数据流 输入流 输出流。如果不指定,则内部实例化一个内存流 返回输出流,注意此时指针位于末端 解压缩数据流 输入流 输出流。如果不指定,则内部实例化一个内存流 返回输出流,注意此时指针位于末端 压缩字节数组 字节数组 解压缩字节数组 Deflate算法,如果是ZLIB格式,则前面多两个字节,解压缩之前去掉,RocketMQ中有用到 字节数组 把一个字节数组写入到一个数据流 目的数据流 源数据流 写入字节数组,先写入压缩整数表示的长度 读取字节数组,先读取压缩整数表示的长度 写入Unix格式时间,1970年以来秒数,绝对时间,非UTC 读取Unix格式时间,1970年以来秒数,绝对时间,非UTC 复制数组 源数组 起始位置。一般从0开始 复制字节数。用-1表示截取剩余所有数据 返回复制的总字节数 向字节数组写入一片数据 目标数组 目标偏移 源数组 源数组偏移 数量 返回实际写入的字节个数 数据流转为字节数组 针对MemoryStream进行优化。内存流的Read实现是一个个字节复制,而ToArray是调用内部内存复制方法 如果要读完数据,又不支持定位,则采用内存流搬运 如果指定长度超过数据流长度,就让其报错,因为那是调用者所期望的值 数据流 长度,-1表示读到结束 流转换为字符串 目标流 编码格式 字节数组转换为字符串 字节数组 编码格式 字节数组中的偏移 字节数组中的查找长度 从字节数据指定位置读取一个无符号16位整数 偏移 是否小端字节序 从字节数据指定位置读取一个无符号32位整数 偏移 是否小端字节序 从字节数据指定位置读取一个无符号64位整数 偏移 是否小端字节序 从字节数据指定位置读取一个单精度浮点数 偏移 是否小端字节序 从字节数据指定位置读取一个双精度浮点数 偏移 是否小端字节序 向字节数组的指定位置写入一个无符号16位整数 数字 偏移 是否小端字节序 向字节数组的指定位置写入一个无符号32位整数 数字 偏移 是否小端字节序 向字节数组的指定位置写入一个无符号64位整数 数字 偏移 是否小端字节序 向字节数组的指定位置写入一个单精度浮点数 数字 偏移 是否小端字节序 向字节数组的指定位置写入一个双精度浮点数 数字 偏移 是否小端字节序 整数转为字节数组,注意大小端字节序 整数转为字节数组,注意大小端字节序 整数转为字节数组,注意大小端字节序 整数转为字节数组,注意大小端字节序 整数转为字节数组,注意大小端字节序 整数转为字节数组,注意大小端字节序 单精度浮点数转为字节数组,注意大小端字节序 双精度浮点数转为字节数组,注意大小端字节序 字节翻转。支持双字节和四字节多批次翻转,主要用于大小端转换 以压缩格式读取32位整数 数据流 以压缩格式读取32位整数 数据流 尝试读取压缩编码整数 以7位压缩格式写入32位整数,小于7位用1个字节,小于14位用2个字节。 由每次写入的一个字节的第一位标记后面的字节是否还是当前数据,所以每个字节实际可利用存储空间只有后7位。 数据流 数值 实际写入字节数 获取压缩编码整数 把字节数组编码为十六进制字符串 字节数组 偏移 数量。超过实际数量时,使用实际数量 把字节数组编码为十六进制字符串,带有分隔符和分组功能 字节数组 分隔符 分组大小,为0时对每个字节应用分隔符,否则对每个分组使用 最大显示多少个字节。默认-1显示全部 1个字节转为2个16进制字符 解密 Hex编码的字符串 起始位置 长度 字节数组转为Base64编码 是否换行显示 字节数组转为Url改进型Base64编码 Base64字符串转为字节数组 Boyer Moore 字符串搜索算法,比KMP更快,常用于IDE工具的查找 依托于动作的日志类 方法 使用指定方法否则动作日志 写日志 已重载 复合日志提供者,多种方式输出 日志提供者集合 日志等级,只输出大于等于该级别的日志,默认Info,打开NewLife.Debug时默认为最低的Debug 实例化 实例化 实例化 添加一个日志提供者 删除日志提供者 写日志 从复合日志提供者中提取指定类型的日志提供者 已重载。 控制台输出日志 是否使用多种颜色,默认使用 写日志 已重载。 性能计数器接口 数值 次数 速度 平均耗时,单位us 增加 增加的数量 耗时,单位us 计数器助手 开始计时 结束计时 日志接口 文档 https://newlifex.com/core/log 写日志 日志级别 格式化字符串 格式化参数 调试日志 格式化字符串 格式化参数 信息日志 格式化字符串 格式化参数 警告日志 格式化字符串 格式化参数 错误日志 格式化字符串 格式化参数 严重错误日志 格式化字符串 格式化参数 是否启用日志 日志等级,只输出大于等于该级别的日志,默认Info 日志功能接口 日志。非空,默认为Logger.Null 日志功能扩展 写日志 日志功能 格式化字符串 格式化参数,特殊处理时间日期和异常对象 性能跟踪片段。轻量级APM 唯一标识。随线程上下文、Http、Rpc传递,作为内部片段的父级 父级片段标识 跟踪标识。可用于关联多个片段,建立依赖关系,随线程上下文、Http、Rpc传递 开始时间。Unix毫秒 结束时间。Unix毫秒 用户数值。记录数字型标量,如每次数据库操作行数,星尘平台汇总统计 数据标签。记录一些附加数据 错误信息 设置错误信息,ApiException除外 异常 标签 设置数据标签。内部根据长度截断 标签 性能跟踪片段。轻量级APM spanId/traceId采用W3C标准,https://www.w3.org/TR/trace-context/ 构建器 唯一标识。随线程上下文、Http、Rpc传递,作为内部片段的父级 父级片段标识 跟踪标识。可用于关联多个片段,建立依赖关系,随线程上下文、Http、Rpc传递 开始时间。Unix毫秒 结束时间。Unix毫秒 用户数值。记录数字型标量,如每次数据库操作行数,星尘平台汇总统计 数据标签。记录一些附加数据 跟踪标识。强制采样,确保链路采样完整,上下文传递 错误信息 当前线程正在使用的上下文 实例化 实例化 释放资源 设置跟踪标识 创建分片编号 创建跟踪编号 完成跟踪 设置错误信息,ApiException除外 异常 标签 设置数据标签。内部根据长度截断 标签 已重载。 跟踪片段扩展 把片段信息附加到http请求头上 片段 http请求 把片段信息附加到http请求头上 片段 http请求头 把片段信息附加到http请求头上 片段 http请求 把片段信息附加到api请求头上 片段 api请求参数 从http请求头释放片段信息 片段 http请求头 从api请求释放片段信息 片段 参数 从api请求释放片段信息 片段 参数 从数据流traceId中释放片段信息 片段 W3C标准TraceId,可以是traceparent 附加Tag信息在原Tag信息后面 片段 Tag信息 附加Tag信息在原Tag信息后面 片段 Tag信息 可累加的数值标量 附加Http响应内容在原Tag信息后面 跟踪片段构建器 跟踪器 操作名 开始时间。Unix毫秒 结束时间。Unix毫秒 采样总数 错误次数 总耗时。所有请求耗时累加,单位ms 最大耗时。单位ms 最小耗时。单位ms 用户数值。记录数字型标量,如每次数据库操作行数,星尘平台汇总统计 正常采样 异常采样 开始一个Span 完成Span 跟踪片段构建器 跟踪器 操作名 开始时间。Unix毫秒 结束时间。Unix毫秒 采样总数 错误次数 总耗时。所有请求耗时累加,单位ms 最大耗时。单位ms 最小耗时。单位ms 用户数值。记录数字型标量,如每次数据库操作行数,星尘平台汇总统计 正常采样 异常采样 实例化 实例化 开始一个Span,开始计时 完成Span,每一个埋点结束都进入这里 已重载。 性能跟踪器。轻量级APM 采样周期 最大正常采样数。采样周期内,最多只记录指定数量的正常事件,用于绘制依赖关系 最大异常采样数。采样周期内,最多只记录指定数量的异常事件,默认10 超时时间。超过该时间时强制采样,毫秒 最大标签长度。超过该长度时将截断,默认1024字符 向http/rpc请求注入TraceId的参数名,为空表示不注入,默认W3C标准的traceparent 建立Span构建器 开始一个Span 操作名 开始一个Span,指定数据标签 操作名 数据 截断所有Span构建器数据,重置集合 性能跟踪器。轻量级APM 全局实例。可影响X组件各模块的跟踪器 采样周期。默认15s 最大正常采样数。采样周期内,最多只记录指定数量的正常事件,用于绘制依赖关系 最大异常采样数。采样周期内,最多只记录指定数量的异常事件,默认10 超时时间。超过该时间时强制采样,默认15000毫秒 最大标签长度。超过该长度时将截断,默认1024字符 向http/rpc请求注入TraceId的参数名,为空表示不注入,默认是W3C标准的traceparent Span构建器集合 采样定时器 实例化 销毁 处理Span集合。默认输出日志,可重定义输出控制台 建立Span构建器 实例化Span构建器 开始一个Span 操作名 开始一个Span,指定数据标签 操作名 数据 截断所有Span构建器数据,重置集合 日志 写日志 跟踪扩展 创建受跟踪的HttpClient 跟踪器 http处理器 开始一个Span,指定数据标签和用户数值 跟踪器 操作名 数据 用户数值。星尘平台汇总统计 为Http请求创建Span 跟踪器 Http请求 支持作为标签数据的内容类型 为Http请求创建Span 跟踪器 Http请求 直接创建错误Span 跟踪器 操作名 Exception 异常对象,或错误信息 直接创建错误Span 跟踪器 操作名 Exception 异常对象,或错误信息 数据标签 日志功能接口 性能追踪 等级日志提供者,不同等级分不同日志输出 通过指定路径和文件格式来实例化等级日志,每个等级使用自己的日志输出 写日志 日志事件监听器。用于监听内置事件并写入日志 实例化 创建事件源。此时决定要不要跟踪 写入事件。监听器拦截,并写入日志 日志基类。提供日志的基本实现 调试日志 格式化字符串 格式化参数 信息日志 格式化字符串 格式化参数 警告日志 格式化字符串 格式化参数 错误日志 格式化字符串 格式化参数 严重错误日志 格式化字符串 格式化参数 写日志 写日志 格式化参数,特殊处理异常和时间 是否启用日志。默认true 日志等级,只输出大于等于该级别的日志,默认Info 空日志实现 输出日志头,包含所有环境信息 日志等级 打开所有日志记录 最低调试。细粒度信息事件对调试应用程序非常有帮助 普通消息。在粗粒度级别上突出强调应用程序的运行过程 警告 错误 严重错误 关闭所有日志记录 网络日志 服务端 应用标识 客户端标识 实例化网络日志。默认广播到514端口 指定日志服务器地址来实例化网络日志 销毁 写日志 性能计数器。次数、TPS、平均耗时 是否启用。默认true 数值 次数 耗时,单位us 销毁 增加 增加的数量 耗时,单位us 采样间隔,默认1000毫秒 持续采样时间,默认60秒 当前速度 最大速度 最后一个采样周期的平均耗时,单位us 持续采样时间内的最大平均耗时,单位us 定期采样,保存最近60组到数组队列里面 已重载。输出统计信息 文本控件输出日志 文本控件 最大行数,超过该行数讲清空文本控件。默认1000行 写日志 在WinForm控件上输出日志,主要考虑非UI线程操作 不是常用功能,为了避免干扰常用功能,保持UseWinForm开头 要绑定日志输出的WinForm控件 日志 最大行数 文本文件日志类。提供向文本文件写日志的能力 两大用法: 1,Create(path, fileFormat) 指定日志目录和文件名格式 2,CreateFile(path) 指定文件,一直往里面写 2015-06-01 为了继承TextFileLog,增加了无参构造函数,修改了异步写日志方法为虚方法,可以进行重载 日志目录 日志文件格式。默认{0:yyyy_MM_dd}.log 日志文件上限。超过上限后拆分新日志文件,默认10MB,0表示不限制大小 日志文件备份。超过备份数后,最旧的文件将被删除,默认100,0表示不限制个数 是否当前进程的第一次写日志 该构造函数没有作用,为了继承而设置 每个目录的日志实例应该只有一个,所以采用静态创建 日志目录或日志文件路径 每个目录的日志实例应该只有一个,所以采用静态创建 日志目录或日志文件路径 销毁 销毁 初始化日志记录文件 获取日志文件路径 写文件 关闭文件 写入队列日志并关闭文件 写日志 已重载。 写日志事件参数 日志等级 日志信息 异常 时间 线程编号 是否线程池线程 是否Web线程 线程名 任务编号 实例化一个日志事件参数 线程专有实例。线程静态,每个线程只用一个,避免GC浪费 初始化为新日志 日志等级 返回自身,链式写法 初始化为新日志 日志 异常 返回自身,链式写法 重置日志事件对象,释放内存 获取日志全文,并重置对象释放内存 已重载。 设置当前线程输出日志时的线程名 日志类,包含跟踪调试功能 文档 https://newlifex.com/core/log 该静态类包括写日志、写调用栈和Dump进程内存等调试功能。 默认写日志到文本文件,可通过修改属性来增加日志输出方式。 对于控制台工程,可以直接通过UseConsole方法,把日志输出重定向为控制台输出,并且可以为不同线程使用不同颜色。 文本文件日志 日志提供者,默认使用文本文件日志 输出日志 信息 写日志 输出异常日志 异常信息 2012.11.05 修正初次调用的时候,由于同步BUG,导致Log为空的问题。 使用控制台输出日志,只能调用一次 是否使用颜色,默认使用 是否同时使用文件日志,默认使用 禁用控制台快捷编辑,在UseConsole方法之后调用 禁用控制台关闭按钮 控制台程序名称,可使用Console.Title动态设置的值 拦截WinForm异常并记录日志,可指定是否用显示。 发为捕获异常时,是否显示提示,默认显示 在WinForm控件上输出日志,主要考虑非UI线程操作 不是常用功能,为了避免干扰常用功能,保持UseWinForm开头 要绑定日志输出的WinForm控件 是否同时使用文件日志,默认使用 最大行数 控件绑定到日志,生成混合日志 是否调试。 文本日志目录 输出核心库和启动程序的版本号 输出程序集版本 数据类型。可用于标准消息的Flag 字符串 二进制数据包 二进制对象 Json对象 标准消息SRMP 标准协议最大优势是短小,头部定长,没有序列化成本,适用于专业级RPC以及嵌入式通信。 缺点是可读性差,不能适用于字符串通信场景。 标准网络封包协议:1 Flag + 1 Sequence + 2 Length + N Payload 1个字节标识位,标识请求、响应、错误等; 1个字节序列号,用于请求响应包配对; 2个字节数据长度N,小端,指示后续负载数据长度(不包含头部4个字节),解决粘包问题; N个字节负载数据,数据内容完全由业务决定,最大长度65535=64k。 如: Open => OK 01-01-04-00-"Open" => 81-01-02-00-"OK" Length为0xFFFF时,后续4字节为正式长度,以支持超过64k的扩展包 标记位。可用于标识消息数据类型DataKinds(非强制),内置0标识字符串,默认1标识二进制 序列号,匹配请求和响应 解析数据时的原始报文 根据请求创建配对的响应消息 从数据包中读取消息 是否成功 把消息转为封包 获取数据包长度 获取解析数据时的原始报文 消息摘要 消息命令 是否响应 是否有错 单向请求 负载数据 根据请求创建配对的响应消息 从数据包中读取消息 是否成功 把消息转为封包 消息命令基类 是否响应 是否有错 单向请求 负载数据 根据请求创建配对的响应消息 从数据包中读取消息 是否成功 把消息转为封包 收到消息时的事件参数 数据包 消息 用户数据。比如远程地址等 数据包编码器 文档 https://newlifex.com/core/packet_codec 编码器的设计目标是作为网络粘包处理的基础实现。 缓存流 获取长度的委托。本包所应该拥有的总长度,满足该长度后解除一个封包 长度的偏移量,截取数据包时加上,否则将会漏掉长度之间的数据包,如MQTT 最后一次解包成功,而不是最后一次接收 缓存有效期。超过该时间后仍未匹配数据包的缓存数据将被抛弃,默认5000ms 最大缓存待处理数据。默认1M APM性能追踪器 数据包加入缓存数据末尾,分析数据流,得到一帧或多帧数据 待分析数据包 检查缓存 无锁并行编程模型 文档 https://newlifex.com/core/actor 独立线程轮询消息队列,简单设计避免影响默认线程池。 适用于任务颗粒较大的场合,例如IO操作。 添加消息,驱动内部处理 消息 发送者 返回待处理消息数 Actor上下文 发送者 消息 无锁并行编程模型 独立线程轮询消息队列,简单设计避免影响默认线程池。 名称 是否启用 受限容量。最大可堆积的消息数,默认Int32.MaxValue 批大小。每次处理消息数,默认1,大于1表示启用批量处理模式 是否长时间运行。长时间运行任务使用独立线程,默认false 存放消息的邮箱。默认FIFO实现,外部可覆盖 性能追踪器 父级性能追踪器。用于把内外调用链关联起来 实例化 销毁 已重载。显示名称 通知开始处理 添加消息时自动触发 开始时,返回执行线程包装任务 通知停止添加消息,并等待处理完成 等待的毫秒数。0表示不等待,-1表示无限等待 添加消息,驱动内部处理 消息 发送者 返回待处理消息数 循环消费消息 循环消费消息 处理消息。批大小为1时使用该方法 上下文 取消通知 批量处理消息。批大小大于1时使用该方法 上下文集合 取消通知 延迟队列。缓冲合并对象,批量处理 借助实体字典,缓冲实体对象,定期给字典换新,实现批量处理。 有可能外部拿到对象后,正在修改,内部恰巧执行批量处理,导致外部的部分修改未能得到处理。 解决办法是增加一个提交机制,外部用完后提交修改,内部需要处理时,等待一个时间。 名称 实体字典 跟踪数。达到该值时输出跟踪日志,默认1000 周期。默认10_000毫秒 最大个数。超过该个数时,进入队列将产生堵塞。默认10_000_000 批大小。默认5_000 等待借出对象确认修改的时间,默认3000ms 保存速度,每秒保存多少个实体 是否异步处理。默认true表示异步处理,共用DQ定时调度;false表示同步处理,独立线程 合并保存的总次数 批次处理成功时 批次处理失败时 实例化 销毁。统计队列销毁时保存数据 初始化 初始化 尝试添加 获取 或 添加 实体对象,在外部修改对象值 外部正在修改对象时,内部不允许执行批量处理 等待确认修改的借出对象数 提交对象的修改,外部不再使用该对象 当前缓存个数 定时处理全部数据 处理一批 发生错误 轻量级主机服务 文档 https://newlifex.com/core/host 开始服务 停止服务 主机服务扩展 注册主机服务,在主机启动和停止时执行 注册主机服务,在主机启动和停止时执行 轻量级应用主机 文档 https://newlifex.com/core/host 销毁主机时,会触发所有服务的停止事件 添加服务 添加服务 同步运行,大循环阻塞 异步允许,大循环阻塞 关闭主机 轻量级应用主机 文档 https://newlifex.com/core/host 销毁主机时,会触发所有服务的停止事件 服务提供者 服务集合 通过制定服务提供者来实例化一个应用主机 销毁 添加服务 添加服务 开始 停止 同步运行,大循环阻塞 异步允许,大循环阻塞 关闭主机 注册应用退出事件 在不同场景可能被多次执行,调用方需要做判断 回调函数 注册应用退出事件。仅执行一次 回调函数 后台任务 文档 https://newlifex.com/core/host 执行 开始 停止 销毁 认证用户接口,具有登录验证、注册、在线等基本信息 密码 登录次数 最后登录 最后登录IP 注册时间 注册IP 保存 用户接口工具类 比较密码相等 比较密码MD5 比较密码RC4 保存登录信息 保存注册信息 处理器 上一个处理器 下一个处理器 读取数据,返回结果作为下一个处理器消息 最终处理器决定如何使用消息。 处理得到单个消息时,调用一次下一级处理器,返回下级结果给上一级; 处理得到多个消息时,调用多次下一级处理器,返回null给上一级; 上下文 消息 写入数据,返回结果作为下一个处理器消息 上下文 消息 打开连接 上下文 关闭连接 上下文 原因 发生错误 上下文 异常 处理器 上一个处理器 下一个处理器 读取数据,返回结果作为下一个处理器消息 最终处理器决定如何使用消息。 处理得到单个消息时,调用一次下一级处理器,返回下级结果给上一级; 处理得到多个消息时,调用多次下一级处理器,返回null给上一级; 上下文 消息 写入数据,返回结果作为下一个处理器消息 上下文 消息 打开连接 上下文 关闭连接 上下文 原因 发生错误 上下文 异常 处理器上下文 管道 上下文拥有者 读取管道过滤后最终处理消息 写入管道过滤后最终处理消息 处理器上下文 管道 上下文拥有者 数据项 设置 或 获取 数据项 读取管道过滤后最终处理消息 写入管道过滤后最终处理消息 用户接口 编号 名称 昵称 启用 轻量级对象容器,支持注入 文档 https://newlifex.com/core/object_container 注册类型和名称 接口类型 实现类型 实例 添加 尝试添加 在指定容器中解析类型的实例 接口类型 容器 生命周期 单实例 容器内单实例 每次一个实例 对象映射接口 服务类型 实现类型 生命周期 管道。进站顺序,出站逆序 添加处理器到末尾 处理器 读取数据,返回结果作为下一个处理器消息 上下文 消息 写入数据,返回结果作为下一个处理器消息 上下文 消息 打开连接 上下文 关闭连接 上下文 原因 发生错误 上下文 异常 管道。进站顺序,出站逆序 处理器集合 添加处理器到末尾 处理器 读取数据,顺序过滤消息,返回结果作为下一个处理器消息 最终处理器决定如何使用消息。 处理得到单个消息时,调用一次下一级处理器,返回下级结果给上一级; 处理得到多个消息时,调用多次下一级处理器,返回null给上一级; 上下文 消息 写入数据,逆序过滤消息,返回结果作为下一个处理器消息 上下文 消息 打开连接 上下文 关闭连接 上下文 原因 发生错误 上下文 异常 通用插件接口 为了方便构建一个简单通用的插件系统,先规定如下: 1,负责加载插件的宿主,在加载插件后会进行插件实例化,此时可在插件构造函数中做一些事情,但不应该开始业务处理,因为宿主的准备工作可能尚未完成 2,宿主一切准备就绪后,会顺序调用插件的Init方法,并将宿主标识传入,插件通过标识区分是否自己的目标宿主。插件的Init应尽快完成。 3,如果插件实现了接口,宿主最后会清理资源。 初始化 插件宿主标识 服务提供者 返回初始化是否成功。如果当前宿主不是所期待的宿主,这里返回false 插件特性。用于判断某个插件实现类是否支持某个宿主 插件宿主标识 实例化 插件管理器 宿主标识,用于供插件区分不同宿主 宿主服务提供者 插件集合 日志提供者 实例化一个插件管理器 子类重载实现资源释放逻辑时必须首先调用基类方法 从Dispose调用(释放所有资源)还是析构函数调用(释放非托管资源)。 因为该方法只会被调用一次,所以该参数的意义不太大。 加载插件。此时是加载所有插件,无法识别哪些是需要的 开始初始化。初始化之后,不属于当前宿主的插件将会被过滤掉 服务接口。 服务代理XAgent可以附加代理实现了IServer接口的服务。 开始 停止 关闭原因。便于日志分析 范围服务。该范围生命周期内,每个服务类型只有一个实例 满足Singleton和Scoped的要求,暂时无法满足Transient的要求(仍然只有一份)。 服务提供者 范围服务工厂 创建范围服务 模型扩展 获取指定类型的服务对象 获取必要的服务,不存在时抛出异常 服务提供者 服务类型 获取必要的服务,不存在时抛出异常 服务类型 服务提供者 获取一批服务 服务类型 服务提供者 获取一批服务 服务提供者 服务类型 创建范围作用域,该作用域内提供者解析一份数据 服务提供者 创建服务对象,使用服务提供者来填充构造函数 服务提供者 服务类型 轻量级对象容器,支持注入 文档 https://newlifex.com/core/object_container 当前容器 当前容器提供者 服务集合 注册项个数 添加,允许重复添加同一个服务 尝试添加,不允许重复添加同一个服务 注册 接口类型 实现类型 实例 在指定容器中解析类型的实例 接口类型 容器 在指定容器中解析类型的实例 已重载。 对象映射 服务类型 实现类型 生命周期 实例 对象工厂 实例化 实例化 实例化 显示友好名称 容器 对象容器助手。扩展方法专用 添加单实例,指定实现类型 添加单实例,指定实现类型 添加单实例,指定实例工厂 添加单实例,指定实例工厂 添加单实例,指定实例 添加单实例,指定实例 尝试添加单实例,指定实现类型 尝试添加单实例,指定实现类型 尝试添加单实例,指定实例 添加范围容器实例,指定实现类型 添加范围容器实例,指定实现类型 添加范围容器实例,指定实现类型 添加范围容器实例,指定实现工厂 添加范围容器实例,指定实现工厂 添加范围容器实例,指定实现类型 尝试添加范围容器实例,指定实现类型 尝试添加范围容器实例,指定实例 添加瞬态实例,指定实现类型 添加瞬态实例,指定实现类型 添加瞬态实例,指定实现类型 添加瞬态实例,指定实现工厂 添加瞬态实例,指定实现工厂 添加瞬态实例,指定实现类型 尝试添加瞬态实例,指定实现类型 尝试添加瞬态实例,指定实例 从对象容器创建服务提供者 从对象容器创建应用主机 解析类型的实例 接口类型 对象容器 消息匹配队列接口。用于把响应数据包配对到请求包 加入请求队列 拥有者 请求消息 超时取消时间 任务源 检查请求队列是否有匹配该响应的请求 拥有者 响应消息 任务结果 用于检查匹配的回调 清空队列 消息匹配队列。子类可重载以自定义请求响应匹配逻辑 按指定大小来初始化队列 加入请求队列 拥有者 请求的数据 超时取消时间 任务源 检查请求队列是否有匹配该响应的请求 拥有者 响应消息 任务结果 用于检查匹配的回调 定时检查发送队列,超时未收到响应则重发 清空队列 Json编码器。用于把用户对象编码为Json字符串 发送消息时,写入数据,编码并加入队列 遇到消息T时,调用Encode编码并加入队列。 Encode返回空时,跳出调用链。 接收数据后,读取数据包,Decode解码得到消息 Decode可以返回多个消息,每个消息调用一次下一级处理器。 Decode返回空时,跳出调用链。 长度字段作为头部 长度所在位置 长度占据字节数,1/2/4个字节,0表示压缩编码整数,默认2 过期时间,超过该时间后按废弃数据处理,默认500ms 编码 解码 连接关闭时,清空粘包编码器 消息封包编码器 该编码器向基于请求响应模型的协议提供了匹配队列,能够根据响应序列号去匹配请求。 消息封包编码器实现网络处理器,具体用法是添加网络客户端或服务端主机。主机收发消息时,会自动调用编码器对消息进行编码解码。 发送消息SendMessage时调用编码器Write/Encode方法; 接收消息时调用编码器Read/Decode方法,消息存放在ReceivedEventArgs.Message。 网络编码器支持多层添加,每个编码器处理后交给下一个编码器处理,直到最后一个编码器,然后发送出去。 消息队列。用于匹配请求响应包 匹配队列大小 请求消息匹配队列中等待响应的超时时间。默认30_000ms 某些RPC场景需要更长时间等待响应时,可以加大该值。 该值不宜过大,否则会导致请求队列过大,影响并行请求数。 最大缓存待处理数据。默认10M 使用数据包。写入时数据包转消息,读取时消息自动解包返回数据负载,要求T实现IMessage。默认true 发送消息时,写入数据,编码并加入队列 遇到消息T时,调用Encode编码并加入队列。 Encode返回空时,跳出调用链。 编码消息,一般是编码为Packet后传给下一个处理器 把请求加入队列,等待响应到来时建立请求响应匹配 连接关闭时,清空粘包编码器 接收数据后,读取数据包,Decode解码得到消息 Decode可以返回多个消息,每个消息调用一次下一级处理器。 Decode返回空时,跳出调用链。 解码 是否匹配响应 从数据流中获取整帧数据长度 数据包 长度的偏移量 长度大小。0变长,1/2/4小端字节,-2/-4大端字节 数据帧长度(包含头部长度位) 按指定分割字节来处理粘包的处理器 默认以"0x0D 0x0A"即换行来分割,分割的包包含分割字节本身,使用时请注意。 默认分割方式:ISocket.Add<SplitDataCodec>() 自定义分割方式:ISocket.Add(new SplitDataHandler { SplitData = 自定义分割字节数组 }) 自定义最大缓存大小方式:ISocket.Add(new SplitDataHandler { MaxCacheDataLength = 2048 }) 自定义方式:ISocket.Add(new SplitDataHandler { MaxCacheDataLength = 2048, SplitData = 自定义分割字节数组 }) 粘包分割字节数据(默认0x0D,0x0A) 最大缓存待处理数据,默认1024字节 读取数据 连接关闭时,清空粘包编码器 解码 获取包含分割字节在内的数据长度 标准网络封包。头部4字节定长 文档 https://newlifex.com/core/srmp 写入数据 加入队列 解码 是否匹配响应 连接关闭时,清空粘包编码器 WebSocket消息编码器 打开连接 上下文 连接关闭时,清空粘包编码器 读取数据 发送消息时,写入数据 DNS解析器 解析域名 DNS解析器,带有缓存,解析失败时使用旧数据 静态实例 缓存超时时间 解析域名 IP地址提供者 获取IP地址的物理地址位置 网络数据处理器。可作为业务处理实现,也可以作为前置协议解析 建立连接时初始化会话 会话 处理客户端发来的数据 网络服务的会话,每个Tcp/Udp连接作为一个会话 每当收到一个Tcp连接时,创建一个INetSession会话,用于处理该连接的业务。 使用Udp服务端时,收到远程节点的第一个数据包时,也会创建一个会话,处理该节点的业务。 所有应用服务器以会话作为业务处理核心。 应用服务器收到新会话请求后,通过启动一个会话处理。 会话进行业务处理的过程中,可以通过多个Send方法向客户端发送数据。 唯一会话标识。在主服务中唯一标识当前会话,原子自增 主服务。负责管理当前会话的主服务器NetServer Socket服务器。当前通讯所在的Socket服务器,其实是TcpServer/UdpServer 客户端。跟客户端通讯的那个Socket,其实是服务端TcpSession/UdpSession 客户端地址 开始会话处理。 主动关闭跟客户端的网络连接 断开原因。包括 SendError/RemoveNotAlive/Dispose/GC 等,其中 ConnectionReset 为网络被动断开或对方断开 连接创建事件。创建会话之后 连接断开事件。包括客户端主动断开、服务端主动断开以及服务端超时下线 发送数据,直达网卡 数据包 发送数据流,直达网卡 发送字符串,直达网卡 通过管道发送消息,不等待响应。管道内对消息进行报文封装处理,最终得到二进制数据进入网卡 异步发送消息并等待响应。管道内对消息进行报文封装处理,最终得到二进制数据进入网卡 异步发送消息并等待响应。管道内对消息进行报文封装处理,最终得到二进制数据进入网卡 消息 取消通知 数据到达事件。包括原始数据包Packet以及管道处理器解码后的业务消息Message 会话事件参数 会话 基础Socket接口 封装所有基础接口的共有特性! 核心设计理念:事件驱动,接口统一,简单易用! 异常处理理念:确保主流程简单易用,特殊情况的异常通过事件处理! 名称。主要用于日志输出 基础Socket对象 本地地址 端口 消息管道。收发消息都经过管道处理器,进行协议编码解码 1,接收数据解码时,从前向后通过管道处理器; 2,发送数据编码时,从后向前通过管道处理器; 日志提供者 是否输出发送日志。默认false 是否输出接收日志。默认false APM性能追踪器 已重载。日志加上前缀 错误发生/断开连接时 Socket客户端 具备打开关闭 超时。默认3000ms 是否活动 打开连接 是否成功 关闭连接 关闭原因。便于日志分析 是否成功 打开后触发。 关闭后触发。可实现掉线重连 远程通信Socket,仅具有收发功能 标识 远程地址 最后一次通信时间,主要表示会话活跃时间,包括收发 发送原始数据包 目标地址由决定 数据包 是否成功 接收数据。阻塞当前线程等待返回 异步接收数据 数据到达事件 异步发送消息并等待响应 消息 异步发送消息并等待响应 消息 取消通知 发送消息,不等待响应 消息 处理消息数据帧 数据帧 远程通信Socket扩展 发送数据流 会话 数据流 返回是否成功 发送字符串 会话 要发送的字符串 文本编码,默认null表示UTF-8编码 返回自身,用于链式写法 接收字符串 会话 文本编码,默认null表示UTF-8编码 添加处理器 会话 添加处理器 会话 处理器 切分数据流为多个数据包消息进行发送,接收方按顺序组装 会话 数据流 拆分消息数 切分文件流为多个数据包发出,接收方按顺序组装 Socket服务器接口 是否活动 会话超时时间。默认20*60秒 对于每一个会话连接,如果超过该时间仍然没有收到任何数据,则断开会话连接。 会话集合。用地址端口作为标识,业务应用自己维持地址端口与业务主键的对应关系。 新会话时触发 用于与对方进行通讯的Socket会话,仅具有收发功能,也专用于上层应用收发数据 Socket会话发送数据不需要指定远程地址,因为内部已经具有。 接收数据时,Tcp接收全部数据,而Udp只接受来自所属远方的数据。 Socket会话不具有连接和断开的能力,所以需要外部连接好之后再创建Socket会话。 但是会话可以销毁,来代替断开。 对于Udp额外创建的会话来说,仅仅销毁会话而已。 所以,它必须具有收发数据的能力。 Socket服务器。当前通讯所在的Socket服务器,其实是TcpServer/UdpServer 会话事件参数 会话 实例化 帧数据传输接口 实现者确保数据以包的形式传输,屏蔽数据的粘包和拆包 超时 打开 关闭 写入数据 数据包 读取数据 数据到达事件 网络处理器上下文 远程连接 数据帧 读取管道过滤后最终处理消息 写入管道过滤后最终处理消息 网络服务器。可同时支持多个Socket服务器,同时支持IPv4和IPv6,同时支持Tcp和Udp 网络服务器模型,所有网络应用服务器可以通过继承该类实现。 该类仅实现了业务应用对网络流的操作,与具体网络协议无关。 收到请求后,会建立会话,并加入到会话集合中,然后启动会话处理; 标准用法: 指定端口后直接,NetServer将同时监听Tcp/Udp和IPv4/IPv6(会检查是否支持)四个端口。 高级用法: 重载方法来创建一个SocketServer并赋值给属性,将会在时首先被调用。 超级用法: 使用方法向网络服务器添加Socket服务,其中第一个将作为默认Socket服务。 如果Socket服务集合为空,将依据地址、端口、地址族、协议创建默认Socket服务。 如果地址族指定为IPv4和IPv6以外的值,将同时创建IPv4和IPv6两个Socket服务; 如果协议指定为Tcp和Udp以外的值,将同时创建Tcp和Udp两个Socket服务; 默认情况下,地址族和协议都是其它值,所以一共将会创建四个Socket服务(Tcp、Tcpv6、Udp、Udpv6)。 服务名 本地结点 端口 协议类型 寻址方案 服务器集合 服务器。返回服务器集合中的第一个服务器 是否活动 会话超时时间。默认0秒,使用SocketServer默认值 对于每一个会话连接,如果超过该时间仍然没有收到任何数据,则断开会话连接。 消息管道。收发消息都经过管道处理器,进行协议编码解码 1,接收数据解码时,从前向后通过管道处理器; 2,发送数据编码时,从后向前通过管道处理器; 使用会话集合,允许遍历会话。默认true 地址重用,主要应用于网络服务器重启交替。默认false 一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket(TCP连接中, 先调用close() 的一方会进入TIME_WAIT状态),才可以重复绑定使用。 SSL协议。默认None X509证书。用于SSL连接时验证证书指纹,可以直接加载pem证书文件,未指定时不验证证书 可以使用pfx证书文件,也可以使用pem证书文件。 服务端必须指定证书。 var cert = new X509Certificate2("file", "pass"); APM性能追踪器 用于内部Socket服务器的APM性能追踪器 显示统计信息的周期。默认600秒,0表示不显示统计信息 是否输出发送日志。默认false 是否输出接收日志。默认false 服务提供者 用于网络服务器内部解析各种服务,可以直接赋值或者依赖注入。 网络会话默认使用该提供者,应用系统可以在网络会话中创建Scope版服务提供者。 数据项 获取/设置 用户会话数据 实例化一个网络服务器 通过指定监听地址和端口实例化一个网络服务器 通过指定监听地址和端口实例化一个网络服务器 通过指定监听地址和端口,还有协议,实例化一个网络服务器,默认支持Tcp协议和Udp协议 已重载。释放会话集合等资源 添加Socket服务器 添加是否成功 同时添加指定端口的IPv4和IPv6服务器,如果协议不是指定的Tcp或Udp,则同时添加Tcp和Udp服务器 确保建立服务器 添加处理器 添加处理器 处理器 开始服务 开始时调用的方法 停止服务 关闭原因。便于日志分析 停止时调用的方法 关闭原因。便于日志分析 新会话,对于TCP是新连接,对于UDP是新客户端 某个会话的数据到达。sender是INetSession 接受连接时,对于Udp是收到数据时(同时触发OnReceived)。 收到连接时,建立会话,并挂接数据接收和错误处理事件 收到数据时 收到数据时,最原始的数据处理,但不影响会话内部的数据处理 收到数据时,最原始的数据处理,但不影响会话内部的数据处理 错误发生/断开连接时。sender是ISocketSession 触发异常 会话集合。用自增的数字ID作为标识,业务应用自己维持ID与业务主键的对应关系。 会话数 最高会话数 添加会话。子类可以在添加会话前对会话进行一些处理 创建会话 根据会话ID查找会话 为会话创建网络数据处理器。可作为业务处理实现,也可以作为前置协议解析 异步群发数据给所有客户端 已群发客户端总数 异步群发数据给所有客户端 过滤器,判断指定会话是否需要发送 已群发客户端总数 群发管道消息给所有客户端。不等待,支持协议编码 应用消息,底层对其进行协议编码 过滤器,判断指定会话是否需要发送 已群发客户端总数 创建Tcp/Udp、IPv4/IPv6服务 获取统计信息 日志提供者 用于内部Socket服务器的日志提供者 用于网络会话的日志提供者 日志前缀 写日志 输出错误日志 已重载。 网络服务器 创建会话 获取指定标识的会话 网络服务的会话,每个Tcp/Udp连接作为一个会话 网络服务类型 每当收到一个Tcp连接时,创建一个INetSession会话,用于处理该连接的业务。 使用Udp服务端时,收到远程节点的第一个数据包时,也会创建一个会话,处理该节点的业务。 所有应用服务器以会话作为业务处理核心。 应用服务器收到新会话请求后,通过Start启动一个会话处理。 会话进行业务处理的过程中,可以通过多个Send方法向客户端发送数据。 主服务 网络服务的会话,每个Tcp/Udp连接作为一个会话 每当收到一个Tcp连接时,创建一个INetSession会话,用于处理该连接的业务。 使用Udp服务端时,收到远程节点的第一个数据包时,也会创建一个会话,处理该节点的业务。 所有应用服务器以会话作为业务处理核心。 应用服务器收到新会话请求后,通过启动一个会话处理。 会话进行业务处理的过程中,可以通过多个Send方法向客户端发送数据。 实际应用可通过重载OnReceive实现收到数据时的业务逻辑。 唯一会话标识。在主服务中唯一标识当前会话,原子自增 主服务。负责管理当前会话的主服务器NetServer 客户端。跟客户端通讯的那个Socket,其实是服务端TcpSession/UdpServer 服务端 客户端地址 网络数据处理器。可作为业务处理实现,也可以作为前置协议解析 用户会话数据 获取/设置 用户会话数据 服务提供者 根据会话创建Scoped范围服务,以使得各服务解析在本会话中唯一。 基类使用内置ObjectContainer的Scope,在WebApi/Worker项目中,使用者需要自己创建Scope并赋值服务提供者。 连接创建事件。创建会话之后 连接断开事件。包括客户端主动断开、服务端主动断开以及服务端超时下线 数据到达事件 开始会话处理。 子类重载实现资源释放逻辑时必须首先调用基类方法 从Dispose调用(释放所有资源)还是析构函数调用(释放非托管资源) 关闭跟客户端的网络连接 断开原因。包括 SendError/RemoveNotAlive/Dispose/GC 等,其中 ConnectionReset 为网络被动断开或对方断开 新的客户端连接。基类负责触发Connected事件 客户端连接已断开。基类负责触发Disconnected事件 断开原因。包括 SendError/RemoveNotAlive/Dispose/GC 等,其中 ConnectionReset 为网络被动断开或对方断开 客户端连接已断开 收到客户端发来的数据。基类负责触发Received事件 错误发生,可能是连接断开 发送数据,直达网卡 数据包 发送数据流,直达网卡 发送字符串,直达网卡 通过管道发送消息,不等待响应。管道内对消息进行报文封装处理,最终得到二进制数据进入网卡 异步发送消息并等待响应。管道内对消息进行报文封装处理,最终得到二进制数据进入网卡 消息 异步发送消息并等待响应。管道内对消息进行报文封装处理,最终得到二进制数据进入网卡 消息 取消通知 日志提供者 日志前缀 写日志 输出错误日志 已重载。 获取服务 协议类型 未知协议 传输控制协议 用户数据报协议 Http协议 Https协议 WebSocket协议 网络资源标识,指定协议、地址、端口、地址族(IPv4/IPv6) 仅序列化,其它均是配角! 有可能代表主机域名,而指定主机IP地址。 协议类型 主机或域名 可能对应多个IP地址 地址 域名多地址时的第一个。 设置地址后,反向覆盖Host。 端口 终结点 域名多地址时的第一个。 设置地址后,反向覆盖Host。 是否Tcp协议 是否Udp协议 实例化 实例化 实例化 实例化 实例化 分析 获取该域名下所有IP地址 获取该域名下所有IP节点(含端口) 分析地址 主机地址 已重载。 重载类型转换,字符串直接转为NetUri对象 收到数据时的事件参数 原始数据包 Packet内部的Data可能是网络缓冲区,并非全部数据都属于当前消息,需要ReadBytes得到有效数据。 本地地址 远程地址 管道处理器解码后的消息,一般就是业务消息 用户自定义数据 获取当前事件的原始数据。避免用户错误使用Packet.Data 会话基类 标识 名称 本地绑定信息 端口 远程结点地址 超时。默认3000ms 是否活动 底层Socket 最后一次通信时间,主要表示活跃时间,包括收发 最大并行接收数。Tcp默认1,Udp默认CPU*1.6,0关闭异步接收使用同步接收 缓冲区大小。默认8k 连接关闭原因 APM性能追踪器 构造函数,初始化默认名称 销毁 已重载。 打开 是否成功 打开 关闭 关闭原因。便于日志分析 是否成功 关闭 关闭原因。便于日志分析 检查连接是否已关闭,并返回关闭原因,主要检测FIN/RST 打开后触发。 关闭后触发。可实现掉线重连 直接发送数据包 Byte[]/Packet 目标地址由决定 数据包 是否成功 发送数据 目标地址由决定 数据包 是否成功 接收数据 异步接收数据 当前异步接收个数 开始异步接收。在事件中返回数据 是否成功 释放一个事件参数 当前进入线程递归数量,超过10就另外起线程 用一个事件参数来开始异步接收 事件参数 是否在线程池调用,小于等于0不是,大于0是 同步或异步收到数据 ioThread: 如果在StartReceive的时候线程池调用ProcessEvent,则处于worker线程; 如果在IOCP的时候调用ProcessEvent,则处于completionPort线程。 是否在IO线程池里面 接收预处理,粘包拆包 数据包 接收数据的本地地址 远程地址 预处理 数据包 接收数据的本地地址 远程地址 将要处理该数据包的会话 处理收到的数据。默认匹配同步接收委托 接收事件参数 是否已处理,已处理的数据不再向下传递 数据到达事件 触发数据到达事件 接收事件参数 收到异常时如何处理。默认关闭会话 是否当作异常处理并结束会话 消息管道。收发消息都经过管道处理器,进行协议编码解码 1,接收数据解码时,从前向后通过管道处理器; 2,发送数据编码时,从后向前通过管道处理器; 创建上下文 远程会话 通过管道发送消息,不等待响应 通过管道发送消息并等待响应 通过管道发送消息并等待响应 消息 取消通知 处理数据帧 数据帧 错误发生/断开连接时 触发异常 动作 异常 数据项 设置 或 获取 数据项 日志前缀 日志对象。禁止设为空对象 是否输出发送日志。默认false 是否输出接收日志。默认false 收发日志数据体长度。默认64 输出日志 会话集合。带有自动清理不活动会话的功能 服务端 清理周期。单位毫秒,默认10秒。 清理会话计时器 添加新会话,并设置会话编号 返回添加新会话是否成功 获取会话,加锁 关闭所有 移除不活动的会话 网络设置 网络设置 网络调试 会话超时时间。每个Tcp/Udp连接会话,超过一定时间不活跃时做超时下线处理,默认20*60秒 缓冲区大小。每个IOCP异步接收缓冲区的大小,较大的值能减少小包合并,但是当连接数很多时会浪费大量内存,默认8k 收发日志数据体长度。应用于LogSend/LogReceive时的数据HEX长度,默认64字节 自动启用GZip压缩的请求体大小。应用于HttpHelper/ApiHttpClient发起的请求,默认1024,用0表示不压缩 Socket扩展 异步发送数据 异步发送数据 发送数据流 返回自身,用于链式写法 向指定目的地发送信息 缓冲区 返回自身,用于链式写法 向指定目的地发送信息 文本编码,默认null表示UTF-8编码 返回自身,用于链式写法 广播数据包 缓冲区 广播字符串 接收字符串 文本编码,默认null表示UTF-8编码 检查并开启广播 关闭连接 SafeHandle字段 Socket是否未被关闭 根据异步事件获取可输出异常,屏蔽常见异常 Tcp连接信息 本地结点 远程结点 Tcp状态 进程标识 inode标识 实例化Tcp连接信息 已重载。 获取所有Tcp连接 获取所有Tcp连接 获取指定进程的Tcp连接 目标进程。默认-1未指定,获取所有进程的Tcp连接 分析Tcp连接信息 分析Socket的inode TCP服务器 核心工作:启动服务时,监听端口,并启用多个(逻辑处理器数的10倍)异步接受操作。 服务器完全处于异步工作状态,任何操作都不可能被阻塞。 注意:服务器接受连接请求后,不会开始处理数据,而是由事件订阅者决定何时开始处理数据。 名称 本地绑定信息 端口 会话超时时间 对于每一个会话连接,如果超过该时间仍然没有收到任何数据,则断开会话连接。 底层Socket 是否活动 最大并行接收连接数。默认CPU*1.6 不延迟直接发送。Tcp为了合并小包而设计,客户端默认false,服务端默认true 地址重用,主要应用于网络服务器重启交替。默认false 一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket(TCP连接中, 先调用close() 的一方会进入TIME_WAIT状态),才可以重复绑定使用。 KeepAlive间隔。默认0秒不启用 启用Http,数据处理时截去请求响应头,默认false 消息管道。收发消息都经过管道处理器,进行协议编码解码 1,接收数据解码时,从前向后通过管道处理器; 2,发送数据编码时,从后向前通过管道处理器; SSL协议。默认None X509证书。用于SSL连接时验证证书指纹,可以直接加载pem证书文件,未指定时不验证证书 可以使用pfx证书文件,也可以使用pem证书文件。 服务端必须指定证书。 var cert = new X509Certificate2("file", "pass"); APM性能追踪器 构造TCP服务器对象 构造TCP服务器对象 已重载。释放会话集合等资源 开始 停止 关闭原因。便于日志分析 新会话时触发 开启异步接受新连接 是否IO线程 开启异步是否成功 收到新连接时处理 会话集合。用地址端口作为标识,业务应用自己维持地址端口与业务主键的对应关系。 创建会话 错误发生/断开连接时 触发异常 动作 异常 日志前缀 日志对象 是否输出发送日志。默认false 是否输出接收日志。默认false 输出日志 已重载。 增强TCP客户端 实际使用的远程地址。Remote配置域名时,可能有多个IP地址 Socket服务器。当前通讯所在的Socket服务器,其实是TcpServer/UdpServer。该属性决定本会话是客户端会话还是服务的会话 不延迟直接发送。Tcp为了合并小包而设计,客户端默认false,服务端默认true KeepAlive间隔。默认0秒不启用 SSL协议。默认None,服务端Default,客户端不启用 X509证书。用于SSL连接时验证证书指纹,可以直接加载pem证书文件,未指定时不验证证书 可以使用pfx证书文件,也可以使用pem证书文件。 服务端必须指定证书,客户端可以不指定,除非服务端请求客户端证书。 var cert = new X509Certificate2("file", "pass"); 实例化增强TCP 使用监听口初始化 用TCP客户端初始化 打开 关闭 关闭原因。便于日志分析 发送数据 目标地址由决定 数据包 是否成功 异步接收数据。重载以支持SSL 异步读取数据流,仅用于SSL 预处理 数据包 接收数据的本地地址 远程地址 将要处理该数据包的会话 处理收到的数据 接收事件参数 日志前缀 已重载。 增强的UDP 如果已经打开异步接收,还要使用同步接收,则同步Receive内部不再调用底层Socket,而是等待截走异步数据。 会话超时时间 对于每一个会话连接,如果超过该时间仍然没有收到任何数据,则断开会话连接。 是否接收来自自己广播的环回数据。默认false 地址重用,主要应用于网络服务器重启交替。默认false 一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket(TCP连接中, 先调用close() 的一方会进入TIME_WAIT状态),才可以重复绑定使用。 实例化增强UDP 使用监听口初始化 销毁 打开 关闭 发送数据 目标地址由决定 数据包 是否成功 发送消息并等待响应。必须调用会话的发送,否则配对会失败 消息 发送消息并等待响应。必须调用会话的发送,否则配对会失败 消息 取消通知 预处理 数据包 接收数据的本地地址 远程地址 将要处理该数据包的会话 处理收到的数据 接收事件参数 收到异常时如何处理。Tcp/Udp客户端默认关闭会话,但是Udp服务端不能关闭服务器,仅关闭会话 是否当作异常处理并结束会话 新会话时触发 会话集合。用地址端口作为标识,业务应用自己维持地址端口与业务主键的对应关系。 创建会话 接收数据的本地地址 远程地址 已重载。 Udp扩展 发送数据流 返回自身,用于链式写法 向指定目的地发送信息 缓冲区 返回自身,用于链式写法 向指定目的地发送信息 文本编码,默认null表示UTF-8编码 返回自身,用于链式写法 广播数据包 缓冲区 广播字符串 接收字符串 文本编码,默认null表示UTF-8编码 Udp会话。仅用于服务端与某一固定远程地址通信 会话编号 名称 服务器 底层Socket 本地地址 端口 远程地址 超时。默认3000ms 消息管道。收发消息都经过管道处理器,进行协议编码解码 1,接收数据解码时,从前向后通过管道处理器; 2,发送数据编码时,从后向前通过管道处理器; Socket服务器。当前通讯所在的Socket服务器,其实是TcpServer/UdpServer 最后一次通信时间,主要表示活跃时间,包括收发 APM性能追踪器 实例化Udp会话 接收数据的本地地址 开始数据交换 销毁 发送数据 发送消息,不等待响应 发送消息并等待响应 消息 发送消息并等待响应 消息 取消通知 接收数据 异步接收数据 数据接收事件 处理数据帧 数据帧 错误发生/断开连接时 触发异常 动作 异常 已重载。 数据项 设置 或 获取 数据项 日志提供者 是否输出发送日志。默认false 是否输出接收日志。默认false 日志前缀 输出日志 升级更新 优先比较版本Version,再比较时间Time。 自动更新的难点在于覆盖正在使用的exe/dll文件,通过改名可以解决。 名称 服务器地址 版本 本地编译时间 更新目录 目标目录 超链接信息 缓存文件。同名文件不再下载,默认false 更新源文件 实例化一个升级对象实例,获取当前应用信息 获取版本信息,检查是否需要更新 开始更新 开始更新 下载源 文件名 开始更新 下载源 文件名 取消通知 检查并执行更新操作 启动当前应用的新进程。当前进程退出 删除备份文件 目标目录 删除备份文件 目标目录 解压缩 拷贝并替换。正在使用锁定的文件不可删除,但可以改名 源目录 目标目录 日志对象 输出日志 WebSocket客户端 资源地址 WebSocket心跳间隔。默认60秒 实例化 实例化 实例化 打开连接,建立WebSocket请求 关闭连接 接收WebSocket消息 发送消息 发送文本 发送文本 发送二进制数据 发送关闭 握手 网络工具类 设置超时检测时间和检测间隔 一次对server服务大量积压异常TCP ESTABLISHED链接的排查笔记 https://www.jianshu.com/p/a1c3aba4af96 查看连接创建时间: sudo ls /proc/128260/fd -l|grep socket ,可发现大量连接的创建时间在很久之前。 查看连接是否有启用keepalive: ss -aoen|grep ESTAB|grep timer ,带有timer的socket表示启用了keepalive。 要设置的Socket对象 是否启用Keep-Alive 多长时间后开始第一次探测(单位:秒) 探测时间间隔(单位:秒) 分析地址,根据IP或者域名得到IP地址,缓存60秒,异步更新 分析网络终结点 地址,可以不带端口 地址不带端口时指定的默认端口 针对IPv4和IPv6获取合适的Any地址 除了Any地址以为,其它地址不具备等效性 是否Any地址,同时处理IPv4和IPv6 是否Any结点 是否IPv4地址 是否本地地址 获取相对于指定远程地址的本地地址 获取相对于指定远程地址的本地地址 指定地址的指定端口是否已被使用,似乎没办法判断IPv6地址 检查该协议的地址端口是否已经被使用 获取所有Tcp连接,带进程Id 获取所有Tcp连接,带进程Id 获取活动的接口信息 获取可用的DHCP地址 获取可用的DNS地址 获取可用的网关地址 获取可用的IP地址 获取本机可用IP地址,缓存60秒,异步更新 获取可用的多播地址 获取所有物理网卡MAC地址。包括未启用网卡,剔除本地和隧道 获取网卡MAC地址(网关所在网卡) 获取本地第一个IPv4地址。一般是网关所在网卡的IP地址 获取本地第一个IPv6地址 唤醒指定MAC地址的计算机 根据IP地址获取MAC地址 IP地址提供者 获取IP地址的物理地址位置 根据字符串形式IP地址转为物理地址 根据本地网络标识创建客户端 根据远程网络标识创建客户端 根据Uri创建客户端,主要支持Http/WebSocket 程序集辅助类。使用Create创建,保证每个程序集只有一个辅助类 程序集 名称 程序集版本 程序集标题 文件版本 编译时间 公司名称 说明 获取包含清单的已加载文件的路径或 UNC 位置。 创建程序集辅助对象 类型集合,当前程序集的所有类型,包括私有和内嵌,非内嵌请直接调用Asm.GetTypes() 是否系统程序集 入口程序集 加载过滤器,如果返回 false 表示跳过加载。 从程序集中查找指定名称的类型 在程序集中查找类型 查找插件,带缓存 类型 查找所有非系统程序集中的所有插件 继承类所在的程序集会引用baseType所在的程序集,利用这一点可以做一定程度的性能优化。 是否从未加载程序集中获取类型。使用仅反射的方法检查目标类型,如果存在,则进行常规加载 指示是否应检查来自所有引用程序集的类型。如果为 false,则检查来自所有引用程序集的类型。 否则,只检查来自非全局程序集缓存 (GAC) 引用的程序集的类型。 是否引用了 程序集 被引用程序集全名 根据名称获取类型 类型名 是否从未加载程序集中获取类型。使用仅反射的方法检查目标类型,如果存在,则进行常规加载 获取指定程序域所有程序集 程序集目录集合 获取当前程序域所有只反射程序集的辅助类。NETCore不支持只反射加载,该方法动态加载DLL后返回 只反射加载指定路径的所有程序集。NETCore不支持只反射加载,该方法动态加载DLL后返回 获取当前应用程序的所有程序集,不包括系统程序集,仅限本目录 在对程序集的解析失败时发生 已重载。 根据版本号计算得到编译时间 包装程序集内部类的动态对象 类型转换 成员取值 调用成员 包装 已重载。 动态Xml 节点 实例化 实例化 实例化 设置 获取 反射接口 该接口仅用于扩展,不建议外部使用 根据名称获取类型 类型名 是否从未加载程序集中获取类型。使用仅反射的方法检查目标类型,如果存在,则进行常规加载 获取方法 用于具有多个签名的同名方法的场合,不确定是否存在性能问题,不建议普通场合使用 类型 名称 参数类型数组 获取指定名称的方法集合,支持指定参数个数来匹配过滤 参数个数,-1表示不过滤参数个数 获取属性 类型 名称 忽略大小写 获取字段 类型 名称 忽略大小写 获取成员 类型 名称 忽略大小写 获取字段 获取属性 反射创建指定类型的实例 类型 参数数组 反射调用指定对象的方法 要调用其方法的对象,如果要调用静态方法,则target是类型 方法 方法参数 反射调用指定对象的方法 要调用其方法的对象,如果要调用静态方法,则target是类型 方法 方法参数字典 获取目标对象的属性值 目标对象 属性 获取目标对象的字段值 目标对象 字段 设置目标对象的属性值 目标对象 属性 数值 设置目标对象的字段值 目标对象 字段 数值 从源对象拷贝数据到目标对象 目标对象 源对象 递归深度拷贝,直接拷贝成员值而不是引用 要忽略的成员 从源字典拷贝数据到目标对象 目标对象 源字典 递归深度拷贝,直接拷贝成员值而不是引用 获取一个类型的元素类型 类型 类型转换 数值 获取类型的友好名称 指定类型 是否全名,包含命名空间 是否能够转为指定基类 在指定程序集中查找指定基类或接口的所有子类实现 指定程序集 基类或接口,为空时返回所有类型 在所有程序集中查找指定基类或接口的子类实现 基类或接口 默认反射实现 该接口仅用于扩展,不建议外部使用 根据名称获取类型 类型名 是否从未加载程序集中获取类型。使用仅反射的方法检查目标类型,如果存在,则进行常规加载 获取方法 用于具有多个签名的同名方法的场合,不确定是否存在性能问题,不建议普通场合使用 类型 名称 参数类型数组 获取指定名称的方法集合,支持指定参数个数来匹配过滤 参数个数,-1表示不过滤参数个数 获取属性 类型 名称 忽略大小写 获取字段 类型 名称 忽略大小写 获取成员 类型 名称 忽略大小写 获取字段 获取属性 反射创建指定类型的实例 类型 参数数组 反射调用指定对象的方法 要调用其方法的对象,如果要调用静态方法,则target是类型 方法 方法参数 反射调用指定对象的方法 要调用其方法的对象,如果要调用静态方法,则target是类型 方法 方法参数字典 获取目标对象的属性值 目标对象 属性 获取目标对象的字段值 目标对象 字段 设置目标对象的属性值 目标对象 属性 数值 设置目标对象的字段值 目标对象 字段 数值 从源对象拷贝数据到目标对象 目标对象 源对象 递归深度拷贝,直接拷贝成员值而不是引用 要忽略的成员 从源字典拷贝数据到目标对象 目标对象 源字典 递归深度拷贝,直接拷贝成员值而不是引用 获取一个类型的元素类型 类型 类型转换 数值 获取类型的友好名称 指定类型 是否全名,包含命名空间 是否子类 在指定程序集中查找指定基类的子类 指定程序集 基类或接口,为空时返回所有类型 在所有程序集中查找指定基类或接口的子类实现 基类或接口 反射工具类 文档 https://newlifex.com/core/reflect 当前反射提供者 根据名称获取类型。可搜索当前目录DLL,自动加载 类型名 根据名称获取类型。可搜索当前目录DLL,自动加载 类型名 是否从未加载程序集中获取类型。使用仅反射的方法检查目标类型,如果存在,则进行常规加载 获取方法 用于具有多个签名的同名方法的场合,不确定是否存在性能问题,不建议普通场合使用 类型 名称 参数类型数组 获取指定名称的方法集合,支持指定参数个数来匹配过滤 参数个数,-1表示不过滤参数个数 获取属性。搜索私有、静态、基类,优先返回大小写精确匹配成员 类型 名称 忽略大小写 获取字段。搜索私有、静态、基类,优先返回大小写精确匹配成员 类型 名称 忽略大小写 获取成员。搜索私有、静态、基类,优先返回大小写精确匹配成员 类型 名称 忽略大小写 获取用于序列化的字段 过滤特性的字段 获取用于序列化的属性 过滤特性的属性和索引器 反射创建指定类型的实例 类型 参数数组 反射调用指定对象的方法。target为类型时调用其静态方法 要调用其方法的对象,如果要调用静态方法,则target是类型 方法名 方法参数 反射调用指定对象的方法 要调用其方法的对象,如果要调用静态方法,则target是类型 方法名 数值 方法参数 反射调用是否成功 反射调用指定对象的方法 要调用其方法的对象,如果要调用静态方法,则target是类型 方法 方法参数 反射调用指定对象的方法 要调用其方法的对象,如果要调用静态方法,则target是类型 方法 方法参数字典 获取目标对象指定名称的属性/字段值 目标对象 名称 出错时是否抛出异常 获取目标对象指定名称的属性/字段值 目标对象 名称 数值 是否成功获取数值 获取目标对象的成员值 目标对象 成员 设置目标对象指定名称的属性/字段值,若不存在返回false 目标对象 名称 数值 反射调用是否成功 设置目标对象的成员值 目标对象 成员 数值 从源对象拷贝数据到目标对象 目标对象 源对象 递归深度拷贝,直接拷贝成员值而不是引用 要忽略的成员 从源字典拷贝数据到目标对象 目标对象 源字典 递归深度拷贝,直接拷贝成员值而不是引用 获取一个类型的元素类型 类型 类型转换 数值 类型转换 数值 获取类型的友好名称 指定类型 是否全名,包含命名空间 从参数数组中获取类型数组 获取成员的类型,字段和属性是它们的类型,方法是返回类型,类型是自身 获取类型代码,支持可空类型 是否基础类型。识别常见基元类型和String,支持可空类型 基础类型可以方便的进行字符串转换,用于存储于传输。 在序列化时,基础类型作为原子数据不可再次拆分,而复杂类型则可以进一步拆分。 包括:Boolean/Char/SByte/Byte/Int16/UInt16/Int32/UInt32/Int64/UInt64/Single/Double/Decimal/DateTime/String/枚举,以及这些类型的可空类型 是否可空类型。继承泛型定义Nullable的类型 是否整数。Byte/Int16/Int32/Int64 是否泛型列表 是否泛型字典 是否能够转为指定基类 是否能够转为指定基类 在指定程序集中查找指定基类的子类 指定程序集 基类或接口 在所有程序集中查找指定基类或接口的子类实现 基类或接口 获取类型,如果target是Type类型,则表示要反射的是静态成员 目标对象 把一个方法转为泛型委托,便于快速反射调用 脚本引擎 文档 https://newlifex.com/core/script_engine 三大用法: 1,单个表达式,根据参数计算表达式结果并返回 2,多个语句,最后有返回语句 3,多个方法,有一个名为Execute的静态方法作为入口方法 脚本引擎禁止实例化,必须通过方法创建,以代码为键进行缓存,避免重复创建反复编译形成泄漏。 其中方法的第二个参数为true表示前两种用法,为false表示第三种用法。 最简单而完整的用法: // 根据代码创建脚本实例,相同代码只编译一次 var se = ScriptEngine.Create("a+b"); // 如果Method为空说明未编译,可设置参数 if (se.Method == null) { se.Parameters.Add("a", typeof(Int32)); se.Parameters.Add("b", typeof(Int32)); } // 脚本固定返回Object类型,需要自己转换 var n = (Int32)se.Invoke(2, 3); Console.WriteLine("2+3={0}", n); 无参数快速调用: var n = (Int32)ScriptEngine.Execute("2*3"); 约定参数快速调用: var n = (Int32)ScriptEngine.Execute("p0*p1", new Object[] { 2, 3 }); Console.WriteLine("2*3={0}", n); 代码 是否表达式 参数集合。编译后就不可修改。 最终代码 编译得到的类型 根据代码编译出来可供直接调用的入口方法,Eval/Main 命名空间集合 引用程序集集合 日志 工作目录。执行时,将会作为环境变量的当前目录和PathHelper目录,执行后还原 构造函数私有,禁止外部越过Create方法直接创建实例 代码片段 是否表达式,表达式将编译成为一个Main方法 为指定代码片段创建脚本引擎实例。采用缓存,避免同一脚本重复创建引擎。 代码片段 是否表达式,表达式将编译成为一个Main方法 执行表达式,返回结果 代码片段 执行表达式,返回结果 代码片段 参数名称 参数类型 参数值 执行表达式,返回结果 代码片段 参数名值对 执行表达式,返回结果。参数名默认为p0/p1/p2/pn 参数数组 生成代码。根据完善得到最终代码 获取完整源代码 编译 编译 按照传入参数执行代码 参数 结果 分析命名空间 特性辅助类 获取自定义属性,带有缓存功能,避免因.Net内部GetCustomAttributes没有缓存而带来的损耗 获取成员绑定的显示名 获取成员绑定的备注 获取自定义属性的值。可用于ReflectionOnly加载的程序集 获取自定义属性的值。可用于ReflectionOnly加载的程序集 目标对象 是否递归 Api接口响应代码 成功 200成功。一般用于Http响应,也有部分JsonRpc使用该响应码表示成功 未经许可。一般是指未登录 禁止访问。一般是只已登录但无权访问 找不到 内部服务错误。通用错误 远程调用异常 代码 实例化远程调用异常 实例化远程调用异常 Api助手 性能跟踪器 Http过滤器 异步调用,等待返回结果 响应类型,优先原始字节数据,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 Http客户端 服务操作 参数 取消通知 同步获取,参数构造在Url 响应类型,优先原始字节数据,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 Http客户端 服务操作 参数 异步调用,等待返回结果 响应类型,优先原始字节数据,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 Http客户端 服务操作 参数 取消通知 同步提交,参数Json打包在Body 响应类型,优先原始字节数据,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 Http客户端 服务操作 参数 异步上传,等待返回结果 响应类型,优先原始字节数据,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 Http客户端 服务操作 参数 取消通知 异步删除,等待返回结果 响应类型,优先原始字节数据,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 Http客户端 服务操作 参数 取消通知 异步调用,等待返回结果 响应类型,优先原始字节数据,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 Http客户端 请求方法 服务操作 参数 请求头回调 数据字段名称,默认data。同一套rpc体系不同接口的code/message一致,但data可能不同 取消通知 建立请求,action写到url里面 请求方法 动作 参数 为二进制数据生成请求体内容。对超长内容进行压缩 结果代码名称。默认 code/errcode 结果消息名称。默认 message/msg/errmsg 处理响应。统一识别code/message 响应类型,优先原始字节数据,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 Http响应消息 数据字段名称,默认data。同一套rpc体系不同接口的code/message一致,但data可能不同 处理响应。统一识别code/message 响应类型,优先原始字节数据,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 状态码字段名 Http响应消息 数据字段名称,默认data。同一套rpc体系不同接口的code/message一致,但data可能不同 处理响应。 响应类型,字典返回整体,Object返回data,没找到data时返回整体字典,其它对data反序列化 文本响应消息 状态码字段名 数据字段名称,默认data。同一套rpc体系不同接口的code/message一致,但data可能不同 根据动作和参数构造Url Http应用接口客户端 令牌。每次请求携带 超时时间。默认15000ms 是否使用系统代理设置。默认false不检查系统代理设置,在某些系统上可以大大改善初始化速度 加权轮询负载均衡。默认false只使用故障转移 不可用节点的屏蔽时间。默认60秒 身份验证 默认用户浏览器UserAgent。默认为空,可取值HttpHelper.DefaultUserAgent 创建请求时触发 创建客户端时触发 Http过滤器 状态码字段名。例如code/status等 数据体字段名。例如data/result等 服务器源。正在使用的服务器 调用统计 慢追踪。远程调用或处理时间超过该值时,输出慢调用日志,默认5000ms 跟踪器 服务列表。用于负载均衡和故障转移 当前服务 实例化 实例化 地址集合。多地址逗号分隔,支持权重,test1=3*http://127.0.0.1:1234,test2=7*http://127.0.0.1:3344 按照配置服务实例化,用于NETCore依赖注入 服务提供者,将要解析IConfigProvider 缓存名称,也是配置中心key 添加服务地址 名称 地址,支持名称和权重,test1=3*http://127.0.0.1:1234 添加服务地址 异步获取,参数构造在Url 服务操作 参数 同步获取,参数构造在Url 服务操作 参数 异步提交,参数Json打包在Body 服务操作 参数 同步提交,参数Json打包在Body 服务操作 参数 异步上传,参数Json打包在Body 服务操作 参数 异步修改,参数Json打包在Body 服务操作 参数 异步删除,参数Json打包在Body 服务操作 参数 异步调用,等待返回结果 请求方法 服务操作 参数 请求头回调 取消通知 异步调用,等待返回结果 服务操作 参数 取消通知 同步调用,阻塞等待 服务操作 参数 建立请求 请求方法 调度索引,当前使用该索引处的服务 异步发送 请求 取消通知 获取一个服务用于处理请求,此处可实现负载均衡LoadBalance。默认取当前可用服务 如需实现负载均衡,每次取值后都累加索引,让其下一次记获取时拿到下一个服务。 归还服务,此处实现故障转移Failover,服务的客户端被清空,说明当前服务不可用 在指定服务地址上发生请求 请求消息 服务名 客户端 取消通知 创建客户端 服务项 名称 名称 权重。用于负载均衡,默认1 轮询均衡时,本项第几次使用 总次数 错误数 创建时间。每过一段时间,就清空一次客户端,让它重建连接,更新域名缓存 下一次时间。服务项出错时,将禁用一段时间 客户端 已重载。友好显示 日志 写日志 Http客户端事件参数 客户端 Http请求事件参数 客户端 应用接口客户端接口 令牌。每次请求携带 同步调用,阻塞等待 服务操作 参数 异步调用,等待返回结果 服务操作 参数 取消通知 抽象语法标记。ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。 标签 长度 数值 已重载。 获取OID 读取 读取 读取对象 获取字节数组 读取TLV,Tag+Length+Value 读取器 返回长度,数据流指针移到Value第一个字节 读取TLV,Tag+Length+Value 读取器 是否剔除头部的0x00 ASN.1标签 布尔 长整数 比特串 字节串 OID实体标识符 外部 枚举 序列 集合 数字字符串 可打印字符串 T61字符串 视频 IA5字符串 UTC时间 通用时间 图形 可见字符串 基本字符串 全局字符串 位图 UTF8字符串 组合 应用 标记 CBC块密码模式 密码块链 (CBC) 模式引入了反馈。 每个纯文本块在加密前,通过按位“异或”操作与前一个块的密码文本结合。 这样确保了即使纯文本包含许多相同的块,这些块中的每一个也会加密为不同的密码文本块。 在加密块之前,初始化向量通过按位“异或”操作与第一个纯文本块结合。 如果密码文本块中有一个位出错,相应的纯文本块也将出错。 此外,后面的块中与原出错位的位置相同的位也将出错。 获取一个值,该值指示是否可以转换多个块。 获取一个值,该值指示是否可重复使用当前转换。 获取输入块大小。 获取输出块大小。 实例化 销毁 转换输入字节数组的指定区域,并将所得到的转换复制到输出字节数组的指定区域。 转换指定字节数组的指定区域。 CRC16校验 CRC16表 校验值 重置清零 添加整数进行校验 the byte is taken as the lower 8 bits of value 添加字节数组进行校验,查表计算 CRC16-CCITT x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS 字符串123456789的Crc16是31C3 数据缓冲区 偏移量 字节个数 添加数据流进行校验,不查表计算 CRC-16 x16+x15+x2+1 8005 IBM SDLC 数量 计算校验码 计算数据流校验码 计算数据流校验码,指定起始位置和字节数偏移量 一般用于计算数据包校验码,需要回过头去开始校验,并且可能需要跳过最后的校验码长度。 position小于0时,数据流从当前位置开始计算校验; position大于等于0时,数据流移到该位置开始计算校验,最后由count决定可能差几个字节不参与计算; 如果大于等于0,则表示从该位置开始计算 字节数偏移量,一般用负数表示 Modbus版Crc校验 偏移 数量 Modbus版Crc校验 数据流 回到该位置开始 CRC32校验 Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. Polynomials over GF(2) are represented in binary, one bit per coefficient, with the lowest powers in the most significant bit. Then adding polynomials is just exclusive-or, and multiplying a polynomial by x is a right shift by one. If we call the above polynomial p, and represent a byte as the polynomial q, also with the lowest power in the most significant bit (so the byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, where a mod b means the remainder after dividing a by b. This calculation is done using the shift-register method of multiplying and taking the remainder. The register is initialized to zero, and for each incoming bit, x^32 is added mod p to the register if the bit is a one (where x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x (which is shifting right by one and adding x^32 mod p if the bit shifted out is a one). We start with the highest power (least significant bit) of q and repeat for all eight bits of q. The table is simply the CRC of all possible eight bit values. This is all the information needed to generate CRC's on data a byte at a time for all combinations of CRC register values and incoming bytes. 校验表 校验值 校验值 重置清零 添加整数进行校验 the byte is taken as the lower 8 bits of value 添加字节数组进行校验 The buffer which contains the data The offset in the buffer where the data starts The number of data bytes to update the CRC with. 添加数据流进行校验 数量 计算校验码 计算数据流校验码 计算数据流校验码,指定起始位置和字节数偏移量 一般用于计算数据包校验码,需要回过头去开始校验,并且可能需要跳过最后的校验码长度。 position小于0时,数据流从当前位置开始计算校验; position大于等于0时,数据流移到该位置开始计算校验,最后由count决定可能差几个字节不参与计算; 如果大于等于0,则表示从该位置开始计算 字节数偏移量,一般用负数表示 DSA算法 产生非对称密钥对(私钥和公钥) 密钥长度,默认1024位强密钥 私钥和公钥 签名 验证 从Xml加载DSA密钥 保存DSA密钥到Xml 密码提供者 对密码进行散列处理,此处可以加盐,结果保存在数据库 验证密码散列,包括加盐判断 MD5密码提供者 对密码进行散列处理,此处可以加盐,结果保存在数据库 验证密码散列,包括加盐判断 盐值密码提供者 算法。支持md5/sha1/sha512 使用Unix秒作为盐值。该值为允许的最大时间差,默认0,不使用时间盐值,而是使用随机字符串 一般在传输中使用,避免临时盐值被截取作为它用,建议值30秒。不仅仅是传输耗时,还有两端时间差 对密码进行散列处理,此处可以加盐,结果保存在数据库 密码 创建盐值 验证密码散列,包括加盐判断 高性能低碰撞Murmur128哈希算法 Redis等大量使用,比MD5要好 种子 哈希大小 实例化 初始化 哈希核心 哈希结束 PKCS7填充 获取一个值,该值指示是否可重复使用当前转换。 获取一个值,该值指示是否可以转换多个块。 获取输入块大小。 获取输出块大小。 实例化 销毁 转换输入字节数组的指定区域,并将所得到的转换复制到输出字节数组的指定区域。 转换指定字节数组的指定区域。 数据保护者。保护连接字符串中的密码 保护数据的密钥 算法。默认AES 隐藏字符串 密码名字 全局实例。从环境变量和配置文件读取ProtectedKey密钥 保护连接字符串中的密码 解保护连接字符串中的密码 隐藏连接字符串中的密码 随机数 返回一个小于所指定最大值的非负随机数 返回的随机数的上界(随机数不能取该上界值) 返回一个指定范围内的随机数 调用平均耗时37.76ns,其中GC耗时77.56% 返回的随机数的下界(随机数可取该下界值) 返回的随机数的上界(随机数不能取该上界值) 返回指定长度随机字节数组 调用平均耗时5.46ns,其中GC耗时15% 返回随机数填充的指定长度的数组 数组长度 随机数填充的指定长度的数组 返回指定长度随机字符串 长度 是否包含符号 随机填充指定对象的属性。可用于构造随机数据进行测试 RC4对称加密算法 RC4于1987年提出,和DES算法一样,是一种对称加密算法,也就是说使用的密钥为单钥(或称为私钥)。 但不同于DES的是,RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。 RC4算法的特点是算法简单,运行速度快,而且密钥长度是可变的,可变范围为1-256字节(8-2048比特), 在如今技术支持的前提下,当密钥长度为128比特时,用暴力法搜索密钥已经不太可行,所以可以预见RC4的密钥范围任然可以在今后相当长的时间里抵御暴力搜索密钥的攻击。 实际上,如今也没有找到对于128bit密钥长度的RC4加密算法的有效攻击方法。 加密 数据 密码 打乱密码 密码 密码箱长度 打乱后的密码 RSA算法 RSA加密或签名小数据块时,密文长度128,速度也很快。 产生非对称密钥对 RSAParameters的各个字段采用大端字节序,转为BigInteger的之前一定要倒序。 RSA加密后密文最小长度就是密钥长度,所以1024密钥最小密文长度是128字节。 密钥长度,默认1024位强密钥 产生非对称密钥对 RSAParameters的各个字段采用大端字节序,转为BigInteger的之前一定要倒序。 RSA加密后密文最小长度就是密钥长度,所以1024密钥最小密文长度是128字节。 密钥长度,默认1024位强密钥 RSA参数转为Base64密钥 根据Base64密钥创建RSA参数 创建RSA对象,支持Xml密钥和Pem密钥 RSA公钥加密。仅用于加密少量数据 (PKCS # 1 v2) 的 OAEP 填充 模数大小-2-2 * hLen,其中 hLen 是哈希的大小。 直接加密 (PKCS # 1 1.5 版) 模数大小-11。 (11 个字节是可能的最小填充。 ) 数据明文 公钥 如果为 true,则使用 OAEP 填充(仅可用于运行 Windows XP 及更高版本的计算机)执行直接 System.Security.Cryptography.RSA加密;否则,如果为 false,则使用 PKCS#1 v1.5 填充。 RSA私钥解密。仅用于加密少量数据 (PKCS # 1 v2) 的 OAEP 填充 模数大小-2-2 * hLen,其中 hLen 是哈希的大小。 直接加密 (PKCS # 1 1.5 版) 模数大小-11。 (11 个字节是可能的最小填充。 ) 数据密文 私钥 如果为 true,则使用 OAEP 填充(仅可用于运行 Microsoft Windows XP 及更高版本的计算机)执行直接 System.Security.Cryptography.RSA解密;否则,如果为 false 则使用 PKCS#1 v1.5 填充。 签名,MD5散列 验证,MD5散列 RS256 RS256 RS384 RS384 RS512 RS512 读取PEM文件到RSA参数 Zero填充 获取一个值,该值指示是否可重复使用当前转换。 获取一个值,该值指示是否可以转换多个块。 获取输入块大小。 获取输出块大小。 实例化 销毁 转换输入字节数组的指定区域,并将所得到的转换复制到输出字节数组的指定区域。 转换指定字节数组的指定区域。 安全算法 文档 https://newlifex.com/core/security_helper MD5散列 MD5散列 字符串编码,默认Default MD5散列 字符串编码,默认Default 计算文件的MD5散列 Crc散列 Crc16散列 SHA128 SHA256 SHA384 SHA512 Murmur128哈希 对称加密算法扩展 注意:CryptoStream会把 outstream 数据流关闭 对称加密算法扩展 CBC填充依赖IV,要求加解密的IV一致,而ECB填充则不需要 算法 数据 密码 模式。.Net默认CBC,Java默认ECB 填充算法。默认PKCS7,等同Java的PKCS5 对称解密算法扩展 注意:CryptoStream会把 instream 数据流关闭 对称解密算法扩展 CBC填充依赖IV,要求加解密的IV一致,而ECB填充则不需要 算法 数据 密码 模式。.Net默认CBC,Java默认ECB 填充算法。默认PKCS7,等同Java的PKCS5 转换数据(内部加解密) RC4对称加密算法 二进制序列化 使用7位编码整数。默认false不使用 小端字节序。默认false大端 使用指定大小的FieldSizeAttribute特性,默认false 使用对象引用,默认false 大小宽度。可选0/1/2/4,默认0表示压缩编码整数 解析字符串时,是否清空两头的0字节,默认false 协议版本。用于支持多版本协议序列化,配合FieldSize特性使用。例如JT/T808的2011/2019 要忽略的成员 处理器列表 实例化 添加处理器 添加处理器 获取处理器 写入一个对象 目标对象 类型 写入字节 将字节数组部分写入当前流,不写入数组长度。 包含要写入的数据的字节数组。 buffer 中开始写入的起始点。 要写入的字节数。 写入大小,如果有FieldSize则返回,否则写入编码的大小并返回-1 读取指定类型对象 读取指定类型对象 尝试读取指定类型对象 读取字节 从当前流中将 count 个字节读入字节数组 要读取的字节数。 读取大小 写7位压缩编码整数 以7位压缩格式写入32位整数,小于7位用1个字节,小于14位用2个字节。 由每次写入的一个字节的第一位标记后面的字节是否还是当前数据,所以每个字节实际可利用存储空间只有后7位。 数值 实际写入字节数 以压缩格式读取16位整数 以压缩格式读取32位整数 以压缩格式读取64位整数 读取无符号短整数 读取短整数 读取无符号整数 读取整数 写入字节 写入无符号短整数 写入短整数 写入无符号整数 写入整数 BCD字节转十进制数字 十进制数字转BCD字节 读取指定长度的BCD字符串。BCD每个字节存放两个数字 写入指定长度的BCD字符串。BCD每个字节存放两个数字 写入定长字符串。多余截取,少则补零 读取定长字符串。多余截取,少则补零 是否已达到末尾 检查剩余量是否足够 快速读取 数据流 使用7位编码整数 快速写入 对象 使用7位编码整数 快速写入 对象 目标数据流 使用7位编码整数 颜色处理器。 实例化 写入对象 目标对象 类型 尝试读取指定类型对象 复合对象处理器 实例化 写入对象 目标对象 类型 尝试读取指定类型对象 获取成员 字典数据编码 初始化 写入一个对象 目标对象 类型 尝试读取指定类型对象 字体处理器。 实例化 写入对象 目标对象 类型 尝试读取指定类型对象 二进制基础类型处理器 实例化 写入一个对象 目标对象 类型 是否处理成功 尝试读取指定类型对象 将一个无符号字节写入 要写入的无符号字节。 将字节数组写入,如果设置了UseSize,则先写入数组长度。 包含要写入的数据的字节数组。 将字节数组部分写入当前流,不写入数组长度。 包含要写入的数据的字节数组。 buffer 中开始写入的起始点。 要写入的字节数。 写入字节数组,自动计算长度 缓冲区 数量 将 2 字节有符号整数写入当前流,并将流的位置提升 2 个字节。 要写入的 2 字节有符号整数。 将 4 字节有符号整数写入当前流,并将流的位置提升 4 个字节。 要写入的 4 字节有符号整数。 将 8 字节有符号整数写入当前流,并将流的位置提升 8 个字节。 要写入的 8 字节有符号整数。 判断字节顺序 缓冲区 将 2 字节无符号整数写入当前流,并将流的位置提升 2 个字节。 要写入的 2 字节无符号整数。 将 4 字节无符号整数写入当前流,并将流的位置提升 4 个字节。 要写入的 4 字节无符号整数。 将 8 字节无符号整数写入当前流,并将流的位置提升 8 个字节。 要写入的 8 字节无符号整数。 将 4 字节浮点值写入当前流,并将流的位置提升 4 个字节。 要写入的 4 字节浮点值。 将 8 字节浮点值写入当前流,并将流的位置提升 8 个字节。 要写入的 8 字节浮点值。 将一个十进制值写入当前流,并将流位置提升十六个字节。 要写入的十进制值。 将 Unicode 字符写入当前流,并根据所使用的 Encoding 和向流中写入的特定字符,提升流的当前位置。 要写入的非代理项 Unicode 字符。 将字符数组部分写入当前流,并根据所使用的 Encoding(可能还根据向流中写入的特定字符),提升流的当前位置。 包含要写入的数据的字符数组。 chars 中开始写入的起始点。 要写入的字符数。 写入字符串 要写入的值。 从当前流中读取下一个字节,并使流的当前位置提升 1 个字节。 从当前流中将 count 个字节读入字节数组,如果count小于0,则先读取字节数组长度。 要读取的字节数。 读取整数的字节数组,某些写入器(如二进制写入器)可能需要改变字节顺序 数量 从当前流中读取 2 字节有符号整数,并使流的当前位置提升 2 个字节。 从当前流中读取 4 字节有符号整数,并使流的当前位置提升 4 个字节。 从当前流中读取 8 字节有符号整数,并使流的当前位置向前移动 8 个字节。 使用 Little-Endian 编码从当前流中读取 2 字节无符号整数,并将流的位置提升 2 个字节。 从当前流中读取 4 字节无符号整数并使流的当前位置提升 4 个字节。 从当前流中读取 8 字节无符号整数并使流的当前位置提升 8 个字节。 从当前流中读取 4 字节浮点值,并使流的当前位置提升 4 个字节。 从当前流中读取 8 字节浮点值,并使流的当前位置提升 8 个字节。 从当前流中读取下一个字符,并根据所使用的 Encoding 和从流中读取的特定字符,提升流的当前位置。 从当前流中读取一个字符串。字符串有长度前缀,一次 7 位地被编码为整数。 从当前流中读取十进制数值,并将该流的当前位置提升十六个字节。 以压缩格式读取16位整数 以压缩格式读取32位整数 以压缩格式读取64位整数 以7位压缩格式写入16位整数,小于7位用1个字节,小于14位用2个字节。 由每次写入的一个字节的第一位标记后面的字节是否还是当前数据,所以每个字节实际可利用存储空间只有后7位。 数值 实际写入字节数 以7位压缩格式写入32位整数,小于7位用1个字节,小于14位用2个字节。 由每次写入的一个字节的第一位标记后面的字节是否还是当前数据,所以每个字节实际可利用存储空间只有后7位。 数值 实际写入字节数 以7位压缩格式写入64位整数,小于7位用1个字节,小于14位用2个字节。 由每次写入的一个字节的第一位标记后面的字节是否还是当前数据,所以每个字节实际可利用存储空间只有后7位。 数值 实际写入字节数 列表数据编码 初始化 写入 读取 常用类型编码 初始化 写入 写入字节数组,自动计算长度 缓冲区 数量 读取 从当前流中将 count 个字节读入字节数组,如果count小于0,则先读取字节数组长度。 要读取的字节数。 从当前流中读取 count 个字符,以字符数组的形式返回数据,并根据所使用的 Encoding 和从流中读取的特定字符,提升当前位置。 要读取的字符数。 字段大小特性。 可以通过Size指定字符串或数组的固有大小,为0表示自动计算; 也可以通过指定参考字段ReferenceName,然后从其中获取大小。 支持_Header._Questions形式的多层次引用字段。 支持针对单个成员使用多个FieldSize特性,各自指定不同Version版本,以支持不同版本协议的序列化。 例如JT/T808协议,2011/2019版的相同字段使用不同长度。 大小。使用时,作为偏移量;0表示自动计算大小 大小宽度。特定个数的字节表示长度,自动计算时(Size=0)使用,可选0/1/2/4 参考大小字段名,其中存储了实际大小,使用时获取 协议版本。用于支持多版本协议序列化。例如JT/T808的2011/2019 通过Size指定字符串或数组的固有大小,为0表示自动计算 指定参考字段ReferenceName,然后从其中获取大小 指定参考字段ReferenceName,然后从其中获取大小 在参考字段值基础上的增量,可以是正数负数 指定大小,指定协议版本,用于支持多版本协议序列化 找到所引用的参考字段 目标对象 目标对象的成员 数值 设置目标对象的引用大小值 目标对象 获取目标对象的引用大小值 目标对象 二进制序列化接口 编码整数 小端字节序。默认false大端 要忽略的成员 处理器列表 写入字节 将字节数组部分写入当前流,不写入数组长度。 包含要写入的数据的字节数组。 buffer 中开始写入的起始点。 要写入的字节数。 写入大小 要写入的大小值 返回特性指定的固定长度,如果没有则返回-1 读取字节 从当前流中将 count 个字节读入字节数组 要读取的字节数。 读取大小 二进制读写处理器接口 二进制读写处理器基类 成员访问特性。使用自定义逻辑序列化成员 从数据流中读取消息 序列化 上下文 是否成功 把消息写入到数据流中 序列化 上下文 序列化访问上下文 宿主 对象类型 目标对象 成员 用户对象。存放序列化过程中使用的用户自定义对象 定长字符串序列化特性 长度 定长字符串序列化 从数据流中读取消息 序列化 上下文 是否成功 把消息写入到数据流中 序列化 上下文 完全字符串序列化特性。指示数据流剩下部分全部作为字符串读写 从数据流中读取消息 序列化 上下文 是否成功 把消息写入到数据流中 序列化 上下文 数据流序列化访问器。接口实现者可以在这里完全自定义序列化行为 从数据流中读取消息 数据流 上下文 是否成功 把消息写入到数据流中 数据流 上下文 是否成功 自定义数据序列化访问器。数据T支持Span/Memory等,接口实现者可以在这里完全自定义序列化行为 从数据中读取消息 数据 上下文 是否成功 把消息写入到数据中 数据 上下文 是否成功 访问器助手 支持访问器的对象转数据包 访问器 上下文 通过访问器读取 上下文 通过访问器转换数据包为实体对象 序列化接口 数据流 主对象 成员 字符串编码,默认utf-8 序列化属性而不是字段。默认true 用户对象。存放序列化过程中使用的用户自定义对象 写入一个对象 目标对象 类型 读取指定类型对象 读取指定类型对象 尝试读取指定类型对象 日志提供者 序列化处理器接口 宿主读写器 优先级 写入一个对象 目标对象 类型 尝试读取指定类型对象 序列化接口 数据流。默认实例化一个内存数据流 主对象 成员 字符串编码,默认utf-8 序列化属性而不是字段。默认true 用户对象。存放序列化过程中使用的用户自定义对象 获取流里面的数据 获取流里面的数据包 日志提供者 输出日志 读写处理器基类 宿主读写器 优先级 写入一个对象 目标对象 类型 尝试读取指定类型对象 输出日志 成员序列化访问器。接口实现者可以在这里完全自定义序列化行为 从数据流中读取消息 序列化 上下文 是否成功 把消息写入到数据流中 序列化 上下文 IJson序列化接口 是否缩进 处理器列表 写入字符串 写入 读取 读取字节 IJson读写处理器接口 获取对象的Json字符串表示形式。 返回null表示不支持 IJson读写处理器基类 获取对象的Json字符串表示形式。 返回null表示不支持 写入一个对象 目标对象 类型 是否处理成功 Json序列化接口 文档 https://newlifex.com/core/json 写入对象,得到Json字符串 是否缩进。默认false 是否写空值。默认true 是否驼峰命名。默认false 写入对象,得到Json字符串 序列化选项 从Json字符串中读取对象 类型转换 分析Json字符串得到字典 Json助手 文档 https://newlifex.com/core/json 默认实现 写入对象,得到Json字符串 是否缩进 写入对象,得到Json字符串 是否换行缩进。默认false 是否写空值。默认true 是否驼峰命名。默认false 写入对象,得到Json字符串 序列化选项 从Json字符串中读取对象 从Json字符串中读取对象 格式化Json文本 Json类型对象转换实体类 分析Json字符串得到字典 轻量级FastJson序列化 写入对象,得到Json字符串 是否缩进。默认false 是否写空值。默认true 是否驼峰命名。默认false 写入对象,得到Json字符串 序列化选项 从Json字符串中读取对象 类型转换 分析Json字符串得到字典 Json序列化 文档 https://newlifex.com/core/json 是否缩进 处理器列表 实例化 添加处理器 添加处理器 获取处理器 写入一个对象 目标对象 类型 写入字符串 写入 读取指定类型对象 读取指定类型对象 尝试读取指定类型对象 读取 读取字节 列表数据编码 初始化 写入 读取 复合对象处理器 要忽略的成员 实例化 获取对象的Json字符串表示形式。 返回null表示不支持 写入对象 目标对象 类型 尝试读取指定类型对象 获取成员 Json序列化字典 初始化 写入 读取 Json基础类型处理器 实例化 获取对象的Json字符串表示形式。 返回null表示不支持 尝试读取指定类型对象 Json序列化选项 使用驼峰命名。默认false 忽略空值。默认false 忽略循环引用。遇到循环引用时写{},默认false 缩进。默认false Json分析器 文档 https://newlifex.com/core/json 标识符 左大括号 右大括号 左方括号 右方括号 冒号 逗号 字符串 数字 布尔真 布尔真 单行注释 多行注释开始 多行注释结束 空值 实例化 解码 解码 读取一个Token Json读取器 文档 https://newlifex.com/core/json 是否使用UTC时间 服务提供者 读取Json到指定类型 读取Json到指定类型 Json字典或列表转为具体类型对象 Json对象 模板类型 目标对象 转为泛型列表 目标对象 转为数组 目标对象 转为泛型字典 目标对象 字典转复杂对象,反射属性赋值 目标对象 创建时间 Json写入器 文档 https://newlifex.com/core/json 使用UTC时间。默认false 使用小写名称 使用驼峰命名 忽略空值。默认false 忽略只读属性。默认false 忽略注释。默认true 忽略循环引用。遇到循环引用时写{},默认false 枚举使用字符串。默认false使用数字 缩进。默认false 长整型作为字符串序列化。避免长整型传输给前端时精度丢失,只有值真的超过前端接受范围时才会进行转换,默认false 字节数组序列化为HEX。默认false,使用base64 缩进字符数。默认2 最大序列化深度。超过时不再序列化,而不是抛出异常,默认5 实例化 对象序列化为Json字符串 是否缩进。默认false 是否写控制。默认true 是否驼峰命名。默认false 对象序列化为Json字符串 序列化选项 写入对象 获取结果 根据小写和驼峰格式化名称 当前缩进层级 序列化助手 获取序列化名称 依据 Json/Xml 字典生成实体模型类 二进制序列化接口 处理器列表 使用注释 写入一个对象 目标对象 名称 类型 获取Xml写入器 获取Xml读取器 二进制读写处理器接口 Xml读写处理器基类 Xml序列化 深度 处理器列表 使用特性 使用注释 枚举使用字符串。false时使用数字,默认true XML写入设置 当前名称 实例化 添加处理器 添加处理器 写入一个对象 目标对象 名称 类型 写入开头 写入结尾 获取Xml写入器 读取指定类型对象 读取指定类型对象 尝试读取指定类型对象 读取开始 读取结束 获取Xml读取器 获取字符串 Xml复合对象处理器 实例化 写入对象 目标对象 类型 尝试读取 获取成员 Xml基础类型处理器 实例化 写入一个对象 目标对象 类型 是否处理成功 尝试读取 列表数据编码 初始化 写入 读取 Xml解析器,得到字典和数组 实例化 解码 核心设置 文档 https://newlifex.com/core/setting 是否启用全局调试。默认启用 日志等级,只输出大于等于该级别的日志,All/Debug/Info/Warn/Error/Fatal,默认Info 文件日志目录。默认Log子目录 日志文件上限。超过上限后拆分新日志文件,默认10MB,0表示不限制大小 日志文件备份。超过备份数后,最旧的文件将被删除,网络安全法要求至少保存6个月日志,默认200,0表示不限制个数 日志文件格式。默认{0:yyyy_MM_dd}.log,支持日志等级如 {1}_{0:yyyy_MM_dd}.log 网络日志。本地子网日志广播udp://255.255.255.255:514,或者http://xxx:80/log 日志记录时间UTC校正,单位:小时。默认0表示使用的是本地时间,使用UTC时间的系统转换成本地时间则相差8小时 数据目录。本地数据库目录,默认Data子目录 备份目录。备份数据库时存放的目录,默认Backup子目录 插件目录 插件服务器。将从该网页上根据关键字分析链接并下载插件 辅助解析程序集。程序集加载过程中,被依赖程序集未能解析时,是否协助解析,默认false 服务地址。用户访问的外网地址,反向代理之外,用于内部构造其它Url(如SSO),或者向注册中心登记,多地址逗号隔开 加载完成后 获取插件目录 轻量级Cron表达式 基本构成:秒+分+时+天+月+星期+年 每段构成: * 所有可能的值,该类型片段全部可选 , 列出枚举值 - 范围,横杠表示的一个区间可选 / 指定数值的增量,在上述可选数字内,间隔多少选一个 ? 不指定值,仅日期和星期域支持该字符 # 确定每个月第几个星期几,L表示倒数,仅星期域支持该字符 数字,具体某个数值可选 逗号多选,逗号分隔的多个数字或区间可选 */2 每两秒一次 0,1,2 * * * * 每分钟的0秒1秒2秒各一次 5/20 * * * * 每分钟的5秒25秒45秒各一次 * 1-10,13,25/3 * * * 每小时的1分4分7分10分13分25分,每一秒各一次 0 0 0 1 * * 每个月1日的0点整 0 0 2 * * 1-5 每个工作日的凌晨2点 0 0 0 ? ? 1-7#1 每月第一周的任意一天(周一~周日)的0点整 0 0 0 ? ? 3-5#L2 每个月倒数第二个星期三到星期五的0点整 星期部分采用Linux和.NET风格,0表示周日,1表示周一。 可设置Sunday为1,1表示周日,2表示周一。 文档 https://newlifex.com/core/cron 参考文档 https://help.aliyun.com/document_detail/64769.html 秒数集合 分钟集合 小时集合 日期集合 月份集合 星期集合。key是星期数,value是第几个,负数表示倒数 星期天偏移量。周日对应的数字,默认0。1表示周日时,2表示周一 实例化Cron表达式 实例化Cron表达式 已重载。 指定时间是否位于表达式之内 分析表达式 获得指定时间之后的下一次执行时间,不含指定时间 如果指定时间带有毫秒,则向前对齐。如09:14.123的"15 * * *"下一次是10:15而不是09:15 从该时间秒的下一秒算起的下一个执行时间 下一次执行时间(秒级),如果没有匹配则返回最小时间 获得与指定时间时间符合表达式的最远时间(秒级) 线程池助手 初始化线程池 带异常处理的线程池任务调度,不允许异常抛出,以免造成应用程序退出,同时不会捕获上下文 带异常处理的线程池任务调度,不允许异常抛出,以免造成应用程序退出,同时不会捕获上下文 定时器调度器 创建指定名称的调度器 默认调度器 当前调度器 名称 定时器个数 最大耗时。超过时报警告日志,默认500ms 把定时器加入队列 从队列删除定时器 唤醒处理 调度主程序 检查定时器是否到期 处理每一个定时器 处理每一个定时器 已重载。 日志 不可重入的定时器,支持Cron 文档 https://newlifex.com/core/timerx 为了避免系统的Timer可重入的问题,差别在于本地调用完成后才开始计算时间间隔。这实际上也是经常用到的。 因为挂载在静态列表上,必须从外部主动调用才能销毁定时器。 但是要注意GC回收定时器实例。 该定时器不能放入太多任务,否则适得其反! TimerX必须维持对象,否则Scheduler也没有维持对象时,大家很容易一起被GC回收。 编号 所属调度器 目标对象。弱引用,使得调用方对象可以被GC回收 委托方法 获取/设置 用户数据 基准时间。开机时间 下一次执行时间。开机以来嘀嗒数,无惧时间回拨问题 获取/设置 下一次调用时间 获取/设置 调用次数 获取/设置 间隔周期。毫秒,设为0或-1则只调用一次 获取/设置 异步执行任务。默认false 获取/设置 绝对精确时间执行。默认false 调用中 平均耗时。毫秒 判断任务是否执行的委托。一般跟异步配合使用,避免频繁从线程池借出线程 Cron表达式,实现复杂的定时逻辑 Cron表达式,实现复杂的定时逻辑 链路追踪。追踪每一次定时事件 链路追踪名称。默认使用方法名 当前定时器 实例化一个不可重入的定时器 委托 用户数据 多久之后开始。毫秒 间隔周期。毫秒 调度器 实例化一个不可重入的定时器 委托 用户数据 多久之后开始。毫秒 间隔周期。毫秒 调度器 实例化一个绝对定时器,指定时刻执行,跟当前时间和SetNext无关 委托 用户数据 绝对开始时间 间隔周期。毫秒 调度器 实例化一个绝对定时器,指定时刻执行,跟当前时间和SetNext无关 委托 用户数据 绝对开始时间 间隔周期。毫秒 调度器 实例化一个Cron定时器 委托 用户数据 Cron表达式。支持多个表达式,分号分隔 调度器 实例化一个Cron定时器 委托 用户数据 Cron表达式。支持多个表达式,分号分隔 调度器 销毁定时器 销毁 是否已设置下一次时间 设置下一次运行时间 小于等于0表示马上调度 设置下一次执行时间,并获取间隔 返回下一次执行的间隔时间,不能小于等于0,否则定时器被销毁 延迟执行一个委托。特别要小心,很可能委托还没被执行,对象就被gc回收了 当前时间。定时读取系统时间,避免频繁读取系统时间造成性能瓶颈 已重载 Jwt编码委托 Jwt解码委托 JSON Web Token 主要问题: 1,JWT默认不加密,但可以加密。生成原始令牌后,可以使用该令牌再次对其进行加密。 2,当JWT未加密时,私密数据无法通过JWT传输。 3,JWT不仅可用于认证,还可用于信息交换。善用JWT有助于减少服务器请求数据库的次数。 4,JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。也就是说,一旦JWT签发,在有效期内将会一直有效。 5,JWT本身包含认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于某些重要操作,用户在使用时应该每次都进行进行身份验证。 6,为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行传输。 颁发者 主体所有人。可以存放userid/roleid等,作为用户唯一标识 受众 有效期。默认2小时 生效时间,在此之前是无效的 颁发时间 标识 算法。默认HS256 令牌类型。默认JWT 密钥 数据项 设置 或 获取 数据项 编码目标对象,生成令牌 分析令牌 解码令牌,得到目标对象 注册算法的编解码实现 超链接 名称 全名 超链接 原始超链接 标题 版本 时间 原始Html 分析HTML中的链接 Html文本 基础Url,用于生成超链接的完整Url 用于基础过滤的过滤器 分解文件 已重载。 插件助手 加载插件 提供下载地址的多个目标页面 访问令牌模型 访问令牌 令牌类型 过期时间。秒 刷新令牌 令牌提供者 文档 https://newlifex.com/core/token_provider 密钥。签发方用私钥,验证方用公钥 读取密钥 文件 是否生成 编码用户和有效期得到令牌 用户 有效期 令牌解码得到用户和有效期 令牌 有效期 尝试解码令牌,即使失败,也会返回用户信息和有效时间 令牌 用户信息 有效时间 解码结果,成功或失败 资源定位。无限制解析Url地址 协议 协议 协议 协议 实例化 主机与端口。省略默认端口 解析Url字符串 已重载。 扩展的Web客户端 超时,默认15000毫秒 最后使用的连接名 实例化 销毁 创建客户端会话 发送请求,获取响应 下载字符串 下载文件 获取指定地址的Html,自动处理文本编码 获取指定地址的Html,分析所有超链接 分析指定页面指定名称的链接,并下载到目标目录,返回目标文件 根据版本或时间降序排序选择 指定页面 页面上指定名称的链接 要下载到的目标目录 返回已下载的文件,无效时返回空 分析指定页面指定名称的链接,并下载到目标目录,解压Zip后返回目标文件 提供下载地址的多个目标页面 页面上指定名称的链接 要下载到的目标目录 是否覆盖目标同名文件 日志 控制台帮助类,用于控制控制台的快速编辑、关闭按钮。 退出编辑模式 禁用关闭按钮 控制台标题,程序名称 禁用关闭按钮 窗口句柄 关闭控制台 系统电源状态 脱机状态 联机状态 电源状态未知 充电状态信息 指示电池能量级别较高 指示电池能量级别较低 指示电池能量严重不足 指示电池正在充电 指示没有电池存在 指示未知电池状态 电源状态 当前的系统电源状态 当前的电池电量状态 报告的主电池电源的完全充电寿命(以秒为单位) 电池剩余电量的近似量 电池的剩余使用时间的近似秒数 Xml配置文件基类 标准用法:TConfig.Current 配置实体类通过特性指定配置文件路径以及自动更新时间。 Current将加载配置文件,如果文件不存在或者加载失败,将实例化一个对象返回。 考虑到自动刷新,不提供LoadFile和SaveFile等方法,可通过扩展方法ToXmlFileEntity和ToXmlFile实现。 用户也可以通过配置实体类的静态构造函数修改基类的来动态配置加载信息。 当前实例。通过置空可以使其重新加载。 一些设置。派生类可以在自己的静态构造函数中指定 是否调试 配置文件路径 重新加载时间。单位:毫秒 没有配置文件时是否保存新配置。默认true 配置文件 最后写入时间 过期时间。如果在这个时间之后再次访问,将检查文件修改时间 是否已更新。通过文件写入时间判断 设置过期重新加载配置的时间 是否新的配置文件 销毁 加载指定配置文件 从配置文件中读取完成后触发 保存到配置文件中去 在持久化配置文件时执行 如果重写该方法 请注意调用父类 以免造成配置文件不能正常持久化。 配置文件全路径 老配置文件的内容 新配置文件的内容 保存到配置文件中去 异步保存 新创建配置文件时执行 Xml配置文件特性 配置文件名 重新加载时间。单位:毫秒 指定配置文件名 指定配置文件名和重新加载时间(毫秒) Xml辅助类 序列化为Xml字符串 要序列化为Xml的对象 编码 是否附加注释,附加成员的Description和DisplayName注释 是否使用特性输出 Xml字符串 序列化为Xml字符串 要序列化为Xml的对象 编码 是否附加注释,附加成员的Description和DisplayName注释 是否使用特性输出 忽略XML声明 Xml字符串 序列化为Xml数据流 要序列化为Xml的对象 目标数据流 编码 是否附加注释,附加成员的Description和DisplayName注释 是否使用特性输出 序列化为Xml文件 要序列化为Xml的对象 目标Xml文件 编码 是否附加注释,附加成员的Description和DisplayName注释 Xml字符串 字符串转为Xml实体对象 实体类型 Xml字符串 Xml实体对象 字符串转为Xml实体对象 Xml字符串 实体类型 Xml实体对象 数据流转为Xml实体对象 实体类型 数据流 编码 Xml实体对象 数据流转为Xml实体对象 数据流 实体类型 编码 Xml实体对象 Xml文件转为Xml实体对象 实体类型 Xml文件 编码 Xml实体对象 简单Xml转为字符串字典 字符串字典转为Xml 阿里云文件存储 文档 https://newlifex.com/core/oss 访问域名。Endpoint 访问密钥。AccessKeyId 访问密钥。AccessKeySecret 存储空间 是否支持获取文件直接访问Url 是否支持删除 是否支持搜索 异步调用命令 列出所有存储空间名称 列出所有存储空间明细,支持过滤 列出所有文件名称 列出所有文件明细,支持过滤 上传文件 对象文件名 数据内容 获取文件 获取文件直接访问Url 对象文件名 删除文件 搜索文件 匹配模式。如/202304/*.jpg 开始序号。0开始 最大个数 集合扩展 集合转为数组,加锁确保安全 集合转为数组 集合转为数组 目标匿名参数对象转为名值字典 合并字典参数 字典 目标对象 是否覆盖同名参数 排除项 转为可空字典 从队列里面获取指定个数元素 消费集合 元素个数 从消费集合里面获取指定个数元素 消费集合 元素个数 扩展List,支持遍历中修改元素 线程安全,搜索并返回第一个,支持遍历中修改元素 实体列表 条件 线程安全,搜索并返回第一个,支持遍历中修改元素 实体列表 条件 工具类 文档 https://newlifex.com/core/utility 采用静态架构,允许外部重载工具类的各种实现。 所有类型转换均支持默认值,默认值为该default(T),在转换失败时返回默认值。 类型转换提供者 重载默认提供者并赋值给可改变所有类型转换的行为 转为整数,转换失败时返回默认值。支持字符串、全角、字节数组(小端)、时间(Unix秒不转UTC) Int16/UInt32/Int64等,可以先转为最常用的Int32后再二次处理 待转换对象 默认值。待转换对象无效时使用 转为长整数,转换失败时返回默认值。支持字符串、全角、字节数组(小端)、时间(Unix毫秒不转UTC) 待转换对象 默认值。待转换对象无效时使用 转为浮点数,转换失败时返回默认值。支持字符串、全角、字节数组(小端) Single可以先转为最常用的Double后再二次处理 待转换对象 默认值。待转换对象无效时使用 转为高精度浮点数,转换失败时返回默认值。支持字符串、全角、字节数组(小端) Single可以先转为最常用的Double后再二次处理 待转换对象 默认值。待转换对象无效时使用 转为布尔型,转换失败时返回默认值。支持大小写True/False、0和非零 待转换对象 默认值。待转换对象无效时使用 转为时间日期,转换失败时返回最小时间。支持字符串、整数(Unix秒不考虑UTC转本地) 整数转时间日期时,取1970-01-01加上指定秒数,不考虑UTC时间和本地时间。 长整数转时间日期时,取1970-01-01加上指定毫秒数,不考虑UTC时间和本地时间。 在网络中传输时间日期时,特别是物联网设备到云平台的通信,一般取客户端本地UTC时间,转为长整型传输,服务端再转为本地时间。 因为设备和服务端可能不在同一时区,甚至多个设备也没有处于同一个时区。 待转换对象 转为时间日期,转换失败时返回默认值。支持字符串、整数(Unix秒不考虑UTC转本地) 整数转时间日期时,取1970-01-01加上指定秒数,不考虑UTC时间和本地时间。 长整数转时间日期时,取1970-01-01加上指定毫秒数,不考虑UTC时间和本地时间。 在网络中传输时间日期时,特别是物联网设备到云平台的通信,一般取客户端本地UTC时间,转为长整型传输,服务端再转为本地时间。 因为设备和服务端可能不在同一时区,甚至多个设备也没有处于同一个时区。 不是常量无法做默认值。 待转换对象 默认值。待转换对象无效时使用 转为时间日期,转换失败时返回最小时间。支持字符串、整数(Unix秒) 待转换对象 转为时间日期,转换失败时返回默认值 不是常量无法做默认值 待转换对象 默认值。待转换对象无效时使用 去掉时间日期秒后面部分,可指定毫秒ms、分m、小时h 时间日期 格式字符串,默认s格式化到秒,ms格式化到毫秒 去掉时间日期秒后面部分,可指定毫秒 时间日期 格式字符串,默认s格式化到秒,ms格式化到毫秒 时间日期转为yyyy-MM-dd HH:mm:ss完整字符串,对UTC时间加后缀 最常用的时间日期格式,可以无视各平台以及系统自定义的时间格式 待转换对象 时间日期转为yyyy-MM-dd HH:mm:ss完整字符串,支持指定最小时间的字符串 最常用的时间日期格式,可以无视各平台以及系统自定义的时间格式 待转换对象 字符串空值时(DateTime.MinValue)显示的字符串,null表示原样显示最小时间,String.Empty表示不显示 时间日期转为yyyy-MM-dd HH:mm:ss.fff完整字符串,支持指定最小时间的字符串 最常用的时间日期格式,可以无视各平台以及系统自定义的时间格式 待转换对象 是否使用毫秒 字符串空值时(DateTime.MinValue)显示的字符串,null表示原样显示最小时间,String.Empty表示不显示 时间日期转为yyyy-MM-dd HH:mm:ss +08:00完整字符串,支持指定最小时间的字符串 最常用的时间日期格式,可以无视各平台以及系统自定义的时间格式 待转换对象 字符串空值时(DateTimeOffset.MinValue)显示的字符串,null表示原样显示最小时间,String.Empty表示不显示 时间日期转为yyyy-MM-dd HH:mm:ss.fff +08:00完整字符串,支持指定最小时间的字符串 最常用的时间日期格式,可以无视各平台以及系统自定义的时间格式 待转换对象 是否使用毫秒 字符串空值时(DateTimeOffset.MinValue)显示的字符串,null表示原样显示最小时间,String.Empty表示不显示 时间日期转为指定格式字符串 待转换对象 格式化字符串 字符串空值时显示的字符串,null表示原样显示最小时间,String.Empty表示不显示 字节单位字符串 数值 格式化字符串 字节单位字符串 数值 格式化字符串 获取内部真实异常 获取异常消息 异常 默认转换 转为整数,转换失败时返回默认值。支持字符串、全角、字节数组(小端)、时间(Unix秒) 待转换对象 默认值。待转换对象无效时使用 转为长整数。支持字符串、全角、字节数组(小端)、时间(Unix毫秒) 待转换对象 默认值。待转换对象无效时使用 转为浮点数 待转换对象 默认值。待转换对象无效时使用 转为高精度浮点数 待转换对象 默认值。待转换对象无效时使用 转为布尔型。支持大小写True/False、0和非零 待转换对象 默认值。待转换对象无效时使用 转为时间日期,转换失败时返回最小时间。支持字符串、整数(Unix秒) 待转换对象 默认值。待转换对象无效时使用 整数(Unix秒)转换后不包含时区信息,需要调用.ToLocalTime()来转换为当前时区时间 转为时间日期,转换失败时返回最小时间。支持字符串、整数(Unix秒) 待转换对象 默认值。待转换对象无效时使用 全角为半角 全角半角的关系是相差0xFEE0 去掉时间日期秒后面部分,可指定毫秒ms、分m、小时h 时间日期 格式字符串,默认s格式化到秒,ms格式化到毫秒 时间日期转为yyyy-MM-dd HH:mm:ss完整字符串 待转换对象 是否使用毫秒 字符串空值时显示的字符串,null表示原样显示最小时间,String.Empty表示不显示 时间日期转为yyyy-MM-dd HH:mm:ss完整字符串 待转换对象 是否使用毫秒 字符串空值时显示的字符串,null表示原样显示最小时间,String.Empty表示不显示 时间日期转为指定格式字符串 待转换对象 格式化字符串 字符串空值时显示的字符串,null表示原样显示最小时间,String.Empty表示不显示 获取内部真实异常 获取异常消息 异常 字节单位字符串 数值 格式化字符串 并发字典扩展 从并发字典中删除 路径操作帮助 文档 https://newlifex.com/core/path_helper GetBasePath 依赖BasePath,支持参数和环境变量设置,主要用于存放X组件自身配置和日志等目录。 GetFullPath 依赖BaseDirectory,默认为应用程序域基础目录,支持参数和环境变量设置,此时跟GetBasePath保持一致。 GetFullPath更多用于表示当前工作目录,不可以轻易修改为Environment.CurrentDirectory。 在vs运行应用时,Environment.CurrentDirectory是源码文件所在目录,而不是可执行文件目录。 在StarAgent运行应用时,BasePath和Environment.CurrentDirectory都被修改为工作目录。 基础目录。GetBasePath依赖于此,默认为当前应用程序域基础目录。用于X组件内部各目录,专门为函数计算而定制 为了适应函数计算,该路径将支持从命令行参数和环境变量读取 基准目录。GetFullPath依赖于此,默认为当前应用程序域基础目录。支持BasePath参数修改 为了适应函数计算,该路径将支持从命令行参数和环境变量读取 获取文件或目录基于应用程序域基目录的全路径,过滤相对目录 不确保目录后面一定有分隔符,是否有分隔符由原始路径末尾决定 文件或目录 获取文件或目录的全路径,过滤相对目录。用于X组件内部各目录,专门为函数计算而定制 不确保目录后面一定有分隔符,是否有分隔符由原始路径末尾决定 文件或目录 获取文件或目录基于当前目录的全路径,过滤相对目录 不确保目录后面一定有分隔符,是否有分隔符由原始路径末尾决定 文件或目录 确保目录存在,若不存在则创建 斜杠结尾的路径一定是目录,无视第二参数; 默认是文件,这样子只需要确保上一层目录存在即可,否则如果把文件当成了目录,目录的创建会导致文件无法创建。 文件路径或目录路径,斜杠结尾的路径一定是目录,无视第二参数 该路径是否是否文件路径。文件路径需要取目录部分 合并多段路径 文件路径作为文件信息 从文件中读取数据 把数据写入文件指定位置 复制到目标文件,目标文件必须已存在,且源文件较新 源文件 目标文件 打开并读取 文件信息 是否压缩 要对文件流操作的委托 打开并写入 文件信息 是否压缩 要对文件流操作的委托 解压缩 是否覆盖目标同名文件 压缩文件 路径作为目录信息 获取目录内所有符合条件的文件,支持多文件扩展匹配 目录 文件扩展列表。比如*.exe;*.dll;*.config 是否包含所有子孙目录文件 复制目录中的文件 源目录 目标目录 文件扩展列表。比如*.exe;*.dll;*.config 是否包含所有子孙目录文件 复制每一个文件之前的回调 对比源目录和目标目录,复制双方都存在且源目录较新的文件 源目录 目标目录 文件扩展列表。比如*.exe;*.dll;*.config 是否包含所有子孙目录文件 复制每一个文件之前的回调 从多个目标目录复制较新文件到当前目录 当前目录 多个目标目录 文件扩展列表。比如*.exe;*.dll;*.config 是否包含所有子孙目录文件 压缩 保留供编译器用于跟踪元数据。 开发人员不应在源代码中使用此类。 返回可能为空 当返回指定值时可能为空 返回值 实例化 执行方法后指定成员不为空 不为空的成员 成员不为空 成员不为空 执行方法后指定成员不为空(带条件) 返回值 不为空的成员 成员不为空 成员不为空 不为空 指定参数不为空时返回也不为空 指定参数 实例化 指定在方法返回 ReturnValue 时,即使相应的类型允许,参数也不会为 null。 获取返回值条件。 使用指定的返回值条件初始化属性。 忽略Json序列化 控件助手 执行无参委托 执行单一参数无返回值的委托 执行二参数无返回值的委托 附加文本到文本控件末尾。主要解决非UI线程以及滚动控件等问题 控件 消息 最大行数。超过该行数讲清空控件 滚动控件的滚动条 指定控件 是否底端,或者顶端 处理回车,移到行首 设置默认样式,包括字体、前景色、背景色 控件 字体大小 设置字体大小 采用默认着色方案进行着色 文本控件 开始位置 改变C++类名方法名颜色 着色文本控件的内容 文本控件 正则表达式 开始位置 颜色数组 着色文本控件的内容 文本控件 正则表达式 开始位置 颜色数组 当前Dpi 修正ListView的Dpi 修正窗体的Dpi SM4(国密4) 实例化SM4 实例化SM4 生成IV 生成密钥 生成加密器 生成解密器 SM4无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。 我国国家密码管理局在20012年公布了无线局域网产品使用的SM4密码算法——商用密码算法。 它是分组算法当中的一种,算法特点是设计简沽,结构有特点,安全高效。 数据分组长度为128比特,密钥长度为128 比特。加密算法与密钥扩展算法都采用32轮迭代结构。 SM4密码算法以字节(8位)和字(32位)作为单位进行数据处理。 SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。 roundKeys 获取一个值,该值指示是否可重复使用当前转换。 获取一个值,该值指示是否可以转换多个块。 获取输入块大小。 获取输出块大小。 实例化转换器 销毁 块加密数据,传入缓冲区必须是整块数据 转换输入字节数组的指定区域,并将所得到的转换复制到输出字节数组的指定区域。 转换指定字节数组的指定区域。