| Crates.io | flare-core |
| lib.rs | flare-core |
| version | 0.1.2 |
| created_at | 2025-03-03 07:31:33.288712+00 |
| updated_at | 2025-11-05 16:57:24.060357+00 |
| description | A high-performance, reliable long-connection communication toolkit for Rust, supporting WebSocket and QUIC protocols with features like authentication, device management, serialization negotiation, and protocol racing. |
| homepage | https://github.com/flare-team/flare-core |
| repository | https://github.com/flare-team/flare-core |
| max_upload_size | |
| id | 1575253 |
| size | 595,241 |
Flare Core 是一个高性能、可靠的即时通讯长连接工具包,专为 Rust 设计。它提供了简洁的 API 和强大的功能,让开发者能够轻松构建实时通信应用。
注意: 本文档使用中文编写。For English documentation, please refer to docs.rs/flare-core.
Authenticator trait 提供自定义验证逻辑ConnectionHandler/ConnectionObserver trait 处理消息[dependencies]
flare-core = "0.1.0"
当前版本包含以下特性(可通过 features 启用,未来版本):
default - 默认功能集(当前包含所有功能)use flare_core::server::*;
use flare_core::common::*;
use std::sync::Arc;
// 实现 ConnectionHandler
struct MyHandler;
#[async_trait::async_trait]
impl ConnectionHandler for MyHandler {
async fn handle_frame(&self, frame: &Frame, connection_id: &str) -> Result<Option<Frame>> {
// 处理消息
Ok(None)
}
async fn on_connect(&self, connection_id: &str) -> Result<()> {
println!("新连接: {}", connection_id);
Ok(())
}
async fn on_disconnect(&self, connection_id: &str) -> Result<()> {
println!("连接断开: {}", connection_id);
Ok(())
}
}
#[tokio::main]
async fn main() -> Result<()> {
let handler = Arc::new(MyHandler);
let mut server = ObserverServerBuilder::new("0.0.0.0:8080")
.with_handler(handler)
.build()?;
server.start().await?;
tokio::signal::ctrl_c().await?;
server.stop().await?;
Ok(())
}
use flare_core::server::*;
use flare_core::common::*;
#[tokio::main]
async fn main() -> Result<()> {
let mut server = ServerBuilder::new("0.0.0.0:8080")
.on_message(|frame, ctx| async move {
// 处理消息
Ok(None)
})
.on_connect(|conn_id, ctx| async move {
println!("新连接: {}", conn_id);
Ok(())
})
.build()?;
server.start().await?;
tokio::signal::ctrl_c().await?;
server.stop().await?;
Ok(())
}
use flare_core::client::*;
use flare_core::transport::events::*;
use std::sync::Arc;
// 实现 ConnectionObserver
struct MyObserver;
impl ConnectionObserver for MyObserver {
fn on_event(&self, event: &ConnectionEvent) {
match event {
ConnectionEvent::Connected => println!("已连接"),
ConnectionEvent::Disconnected(reason) => println!("断开: {}", reason),
ConnectionEvent::Message(data) => {
// 处理消息
}
ConnectionEvent::Error(e) => eprintln!("错误: {:?}", e),
}
}
}
#[tokio::main]
async fn main() -> Result<()> {
let observer = Arc::new(MyObserver);
let mut client = ObserverClientBuilder::new("ws://127.0.0.1:8080")
.with_observer(observer)
.build_with_race()
.await?;
// 发送消息
let frame = /* ... */;
client.send_frame(&frame).await?;
tokio::signal::ctrl_c().await?;
client.disconnect().await?;
Ok(())
}
use flare_core::client::*;
#[tokio::main]
async fn main() -> Result<()> {
let mut client = ClientBuilder::new("ws://127.0.0.1:8080")
.on_message(|frame| {
println!("收到消息: {:?}", frame);
Ok(())
})
.on_event(|event| {
println!("事件: {:?}", event);
})
.build_with_race()
.await?;
// 使用客户端...
Ok(())
}
server)HybridServer - 混合服务端,支持多协议监听ServerBuilder / ObserverServerBuilder - 服务端构建器ConnectionManager - 连接管理器ServerCore - 服务端核心功能(连接管理、心跳检测、协商处理)Authenticator - 认证器接口DeviceManager - 设备管理器ServerEventHandler - 事件处理器接口client)HybridClient - 混合客户端,支持协议竞速ClientBuilder / ObserverClientBuilder - 客户端构建器ClientCore - 客户端核心功能(状态管理、心跳管理、消息路由)ConnectionObserver - 连接观察者接口ClientEventHandler - 事件处理器接口common)MessageParser - 消息解析器(支持 Protobuf 和 JSON)CompressionAlgorithm - 压缩算法(None、Gzip、Zstd)SerializationFormat - 序列化格式(Protobuf、JSON)DeviceInfo - 设备信息DeviceConflictStrategy - 设备冲突策略FlareError - 统一错误类型transport)Connection - 连接接口ConnectionEvent - 连接事件WebSocketTransport - WebSocket 传输实现QUICTransport - QUIC 传输实现use flare_core::server::*;
// 自定义认证器
struct MyAuthenticator;
#[async_trait::async_trait]
impl Authenticator for MyAuthenticator {
async fn authenticate(
&self,
token: &str,
connection_id: &str,
device_info: Option<&DeviceInfo>,
metadata: Option<&HashMap<String, Vec<u8>>>,
) -> Result<AuthResult> {
// 验证 token
if token == "valid_token" {
Ok(AuthResult::success(Some("user123".to_string())))
} else {
Ok(AuthResult::failure("Token 无效".to_string()))
}
}
}
let authenticator = Arc::new(MyAuthenticator);
let server = ObserverServerBuilder::new("0.0.0.0:8080")
.enable_auth()
.with_authenticator(authenticator)
.with_auth_timeout(Duration::from_secs(30))
.build()?;
use flare_core::server::*;
use flare_core::common::device::*;
let device_manager = Arc::new(DeviceManager::new(
DeviceConflictStrategyBuilder::new()
.platform_exclusive() // 平台互斥
.build()
));
let server = ObserverServerBuilder::new("0.0.0.0:8080")
.with_device_manager(device_manager)
.build()?;
// 服务端:设置默认格式
let server = ObserverServerBuilder::new("0.0.0.0:8080")
.with_default_format(SerializationFormat::Protobuf)
.with_default_compression(CompressionAlgorithm::Gzip)
.build()?;
// 客户端:设置首选格式(协商模式)
let client = ObserverClientBuilder::new("ws://127.0.0.1:8080")
.with_format(SerializationFormat::Protobuf)
.with_compression(CompressionAlgorithm::Gzip)
.build_with_race()
.await?;
// 客户端:强制指定格式(不协商)
let client = ObserverClientBuilder::new("ws://127.0.0.1:8080")
.force_format(SerializationFormat::Json) // 强制使用 JSON
.build_with_race()
.await?;
use flare_core::common::config_types::TransportProtocol;
let client = ObserverClientBuilder::new("127.0.0.1:8080")
.with_protocol_race(vec![
TransportProtocol::QUIC, // 优先级 0(最高)
TransportProtocol::WebSocket, // 优先级 1
])
.with_protocol_url(TransportProtocol::WebSocket, "ws://127.0.0.1:8080".to_string())
.with_protocol_url(TransportProtocol::QUIC, "quic://127.0.0.1:8081".to_string())
.build_with_race()
.await?;
完整的 API 文档请查看 docs.rs/flare-core
项目包含丰富的示例,位于 examples/ 目录:
基础示例
websocket_server.rs / websocket_client.rs - WebSocket 基础示例quic_server.rs / quic_client.rs - QUIC 基础示例hybrid_server.rs / hybrid_client.rs - 混合协议示例高级示例
negotiation_server.rs / negotiation_client.rs - 序列化协商和设备管理示例auth_server.rs / auth_client.rs - 认证示例simple_server.rs / simple_client.rs - 简单模式示例运行示例:
# 查看所有示例
cargo run --example <example_name>
# 查看示例说明
cat examples/README.md
┌─────────────────────────────────────────┐
│ 应用层 (Application) │
│ - ConnectionHandler / ConnectionObserver │
│ - EventHandler │
│ - Authenticator │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 核心层 (Core) │
│ - ServerCore / ClientCore │
│ - ConnectionManager │
│ - HeartbeatDetector / HeartbeatManager │
│ - DeviceManager │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 协议层 (Protocol) │
│ - WebSocketServer / WebSocketClient │
│ - QUICServer / QUICClient │
│ - HybridServer / HybridClient │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 传输层 (Transport) │
│ - WebSocketTransport │
│ - QUICTransport │
│ - Connection trait │
└─────────────────────────────────────────┘
ServerCore / ClientCore
ConnectionManager
MessageParser
DeviceManager
cargo add flare-core
发布前请确保:
详细发布指南请查看 PUBLISH.md。
# 1. 登录 crates.io(首次发布需要)
cargo login <your-token>
# 2. 检查打包
cargo package
# 3. 发布
cargo publish
欢迎贡献!请查看 CONTRIBUTING.md 了解详细信息。
本项目采用 MIT 许可证。详见 LICENSE 文件。
Flare Core - 让实时通信变得简单 🚀