#im #framework #networking #async

flare-core

A high performance IM framework core library

2 releases

new 0.1.1 Mar 4, 2025
0.1.0 Mar 3, 2025

#1661 in Network programming

Download history 210/week @ 2025-02-27

210 downloads per month
Used in 2 crates

MIT license

42KB
887 lines

Flare Core

Flare Core 是 Flare 即时通讯框架的核心基础库,提供了构建高性能网络应用所需的基础组件和工具。

Crates.io Documentation License

功能特性

🔧 配置管理

  • 支持多种配置源
    use flare::config::{Config, ConfigBuilder};
    
    let config = ConfigBuilder::new()
        .with_file("config.toml")
        .with_env()
        .build()?;
    

📝 日志系统

  • 异步日志
  • 多级别支持
  • 自定义格式化
    use flare::log::{Logger, LogLevel};
    
    let logger = Logger::builder()
        .with_level(LogLevel::Info)
        .with_async(true)
        .build()?;
    

⚠️ 错误处理

  • 统一错误类型
  • 错误链追踪
  • 自定义错误转换
    use flare_core::error::{Error, Result};
    
    #[derive(Debug, Error)]
    pub enum MyError {
        #[error("配置错误: {0}")]
        Config(String),
        #[error("网络错误: {0}")]
        Network(#[from] std::io::Error),
    }
    

🛠 工具集

1. 时间工具

use flare::utils::time::{Duration, Instant};

let timeout = Duration::from_secs(30);
let start = Instant::now();

2. 字符串处理

use flare::utils::string::{StringExt, Base64Ext};

let encoded = "Hello".to_base64();
let hash = "Password".to_sha256();

3. 并发工具

use flare::utils::sync::{AsyncMutex, AsyncRwLock};

let data = AsyncMutex::new(vec![]);
let cache = AsyncRwLock::new(HashMap::new());

4. 网络工具

use flare::utils::net::{IpExt, PortExt};

let ip = "127.0.0.1".parse_ip()?;
let port = 8080.is_available()?;

安装

[dependencies]
flare = "0.1.0"

示例

基础配置

use flare::{config::Config, log::Logger};

#[tokio::main]
async fn main() -> Result<()> {
    // 初始化配置
    let config = Config::from_file("config.toml")?;
    
    // 设置日志
    Logger::init_with_config(&config)?;
    
    // 使用工具函数
    let now = flare::utils::time::now();
    let id = flare::utils::id::generate();
    
    Ok(())
}

错误处理

use flare_core::error::{Error, Result};
use flare::log::error;

async fn process() -> Result<()> {
    let config = Config::from_file("config.toml")
        .map_err(|e| Error::new("配置加载失败").with_cause(e))?;
        
    if let Err(e) = do_something().await {
        error!("处理失败: {}", e);
        return Err(e.into());
    }
    
    Ok(())
}

API 文档

详细的 API 文档请访问 docs.rs

模块结构

flare/
├── config/     # 配置管理
├── log/        # 日志系统
├── error/      # 错误处理
└── utils/      # 工具集
    ├── time/   # 时间工具
    ├── string/ # 字符串处理
    ├── sync/   # 并发工具
    └── net/    # 网络工具

性能考虑

  • 日志异步处理,避免 I/O 阻塞
  • 使用无锁数据结构
  • 内存池复用
  • 零拷贝操作

最佳实践

  1. 配置管理

    • 使用分层配置
    • 环境变量覆盖
    • 配置热重载
  2. 日志使用

    • 合理设置日志级别
    • 使用结构化日志
    • 避免过多日志
  3. 错误处理

    • 使用错误链
    • 提供上下文信息
    • 适当的错误恢复
  4. 工具选择

    • 优先使用库提供的工具
    • 注意性能开销
    • 合理使用异步

常见问题

  1. 配置加载失败

    • 检查文件权限
    • 验证配置格式
    • 确认环境变量
  2. 日志写入问题

    • 检查磁盘空间
    • 验证文件权限
    • 调整缓冲大小
  3. 性能问题

    • 使用异步日志
    • 避免频繁配置读取
    • 合理使用锁

版本说明

  • 遵循语义化版本
  • 保持向后兼容
  • 及时更新依赖

贡献

欢迎提交 Issue 和 Pull Request!

开源协议

MIT License

Dependencies

~7–15MB
~184K SLoC