Mud.Feishu.WebSocket
1.0.6
dotnet add package Mud.Feishu.WebSocket --version 1.0.6
NuGet\Install-Package Mud.Feishu.WebSocket -Version 1.0.6
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Mud.Feishu.WebSocket" Version="1.0.6" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Mud.Feishu.WebSocket" Version="1.0.6" />
<PackageReference Include="Mud.Feishu.WebSocket" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Mud.Feishu.WebSocket --version 1.0.6
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Mud.Feishu.WebSocket, 1.0.6"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Mud.Feishu.WebSocket@1.0.6
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Mud.Feishu.WebSocket&version=1.0.6
#tool nuget:?package=Mud.Feishu.WebSocket&version=1.0.6
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
飞书WebSocket客户端服务
企业级飞书事件订阅WebSocket客户端,提供可靠的连接管理、自动重连和策略模式事件处理。
🚀 新特性:极简API - 一行代码完成服务注册,开箱即用!
✨ 核心特性
- 🚀 极简API - 一行代码完成服务注册,开箱即用
- 🔄 智能连接管理 - 自动重连、心跳检测、状态监控
- 🫀 心跳消息处理 - 支持飞书 heartbeat 消息类型,实时连接状态监控
- 🚀 高性能消息处理 - 异步处理、消息队列、并行执行
- 🎯 策略模式事件处理 - 可扩展的事件处理器架构
- 🛡️ 企业级稳定性 - 完善的错误处理、资源管理、日志记录
- ⚙️ 灵活配置 - 支持配置文件、代码配置和建造者模式
- 📊 监控友好 - 详细的事件通知、性能指标、心跳统计
🚀 快速开始
1. 安装NuGet包
dotnet add package Mud.Feishu.WebSocket
2. 最简配置(一行代码)
在 Program.cs 中:
using Mud.Feishu.WebSocket;
var builder = WebApplication.CreateBuilder(args);
// 一行代码注册WebSocket服务
builder.Services.AddFeishuWebSocketServiceBuilder(builder.Configuration);
var app = builder.Build();
app.Run();
3. 完整配置(添加事件处理器)
// 从配置文件注册并添加事件处理器
builder.Services.AddFeishuWebSocketServiceBuilder(builder.Configuration)
.AddHandler<ReceiveMessageEventHandler>()
.AddHandler<UserCreatedEventHandler>()
.UseMultiHandler();
var app = builder.Build();
app.Run();
4. 配置选项
{
"Feishu": {
"AppId": "your_app_id",
"AppSecret": "your_app_secret",
"WebSocket": {
"AutoReconnect": true,
"MaxReconnectAttempts": 5,
"ReconnectDelayMs": 5000,
"HeartbeatIntervalMs": 30000,
"EnableLogging": true
}
}
}
🏗️ 架构设计
组件化架构
飞书WebSocket客户端采用组件化设计,将复杂功能拆分为专门的组件,提高代码的可维护性和扩展性。
架构设计
核心组件
| 组件 | 职责 | 特性 |
|---|---|---|
| WebSocketConnectionManager | 连接管理器 | 连接建立、断开、状态管理、重连机制 |
| AuthenticationManager | 认证管理器 | WebSocket认证流程、状态管理、认证事件 |
| MessageRouter | 消息路由器 | 消息路由、版本检测(v1.0/v2.0)、处理器管理 |
| BinaryMessageProcessor | 二进制消息处理器 | 增量接收、ProtoBuf/JSON解析、内存优化 |
消息处理器
| 处理器 | 说明 |
|---|---|
| IMessageHandler | 消息处理器接口,提供通用反序列化功能 |
| EventMessageHandler | 事件消息处理器,支持v1.0和v2.0版本 |
| BasicMessageHandler | 基础消息处理器(Ping/Pong、认证、心跳) |
| FeishuWebSocketClient | 主客户端,组合所有组件 |
架构优势
- 🎯 单一职责 - 每个组件专注特定功能,代码清晰易懂
- 🔧 代码复用性提升 - 组件化设计,各组件可独立使用
- 🧪 测试友好 - 每个组件可独立测试,依赖清晰
- 🚀 扩展性提升 - 新功能通过添加组件实现,配置灵活
自定义消息处理器
// 创建自定义消息处理器
public class CustomMessageHandler : JsonMessageHandler
{
public override bool CanHandle(string messageType)
=> messageType == "custom_type";
public override async Task HandleAsync(string message, CancellationToken cancellationToken = default)
{
var data = SafeDeserialize<CustomMessage>(message);
// 处理逻辑...
}
}
// 注册到消息路由器
client.RegisterMessageProcessor(customMessageHandler);
文件结构
Mud.Feishu.WebSocket/
├── Core/ # 核心组件
│ ├── WebSocketConnectionManager.cs # 连接管理
│ ├── AuthenticationManager.cs # 认证管理
│ ├── MessageRouter.cs # 消息路由
│ └── BinaryMessageProcessor.cs # 二进制处理
├── Handlers/ # 消息处理器
│ ├── IMessageHandler.cs # 处理器接口
│ ├── EventMessageHandler.cs # 事件消息处理
│ └── BasicMessageHandler.cs # 基础消息处理
├── SocketEventArgs/ # 事件参数类
├── DataModels/ # 数据模型
├── FeishuWebSocketClient.cs # 主客户端
└── Examples/ # 使用示例
🏗️ 服务注册方式
🚀 最简注册(推荐)
// 一行代码完成基础配置
builder.Services.AddFeishuWebSocketServiceBuilder(builder.Configuration);
// 添加事件处理器
builder.Services.AddFeishuWebSocketServiceBuilder(builder.Configuration)
.AddHandler<ReceiveMessageEventHandler>()
.AddHandler<UserCreatedEventHandler>()
.UseMultiHandler();
⚙️ 代码配置
builder.Services.AddFeishuWebSocketServiceBuilder(options =>
{
options.AppId = "your_app_id";
options.AppSecret = "your_app_secret";
options.AutoReconnect = true;
options.HeartbeatIntervalMs = 30000;
});
🔧 高级配置(建造者模式)
builder.Services.AddFeishuWebSocketBuilder()
.ConfigureFrom(configuration)
.UseMultiHandler()
.EnableMetrics()
.AddHandler<ReceiveMessageEventHandler>()
.Build();
🎯 事件处理器(策略模式)
内置事件处理器
| 处理器 | 事件类型 | 说明 |
|---|---|---|
ReceiveMessageEventHandler |
im.message.receive_v1 |
接收消息事件 |
UserCreatedEventHandler |
contact.user.created_v3 |
用户创建事件 |
MessageReadEventHandler |
im.message.message_read_v1 |
消息已读事件 |
UserAddedToGroupEventHandler |
im.chat.member.user_added_v1 |
用户加入群聊 |
UserRemovedFromGroupEventHandler |
im.chat.member.user_deleted_v1 |
用户离开群聊 |
DefaultFeishuEventHandler |
- | 未知事件类型处理 |
创建自定义事件处理器
public class CustomEventHandler : IFeishuEventHandler
{
private readonly ILogger<CustomEventHandler> _logger;
public CustomEventHandler(ILogger<CustomEventHandler> logger)
=> _logger = logger ?? throw new ArgumentNullException(nameof(logger));
public string SupportedEventType => "custom.event.example_v1";
public async Task HandleAsync(EventData eventData, CancellationToken cancellationToken = default)
{
if (eventData == null) throw new ArgumentNullException(nameof(eventData));
_logger.LogInformation("🎯 处理自定义事件: {EventType}", eventData.EventType);
// 实现你的业务逻辑
await ProcessBusinessLogicAsync(eventData);
}
private async Task ProcessBusinessLogicAsync(EventData eventData)
{
// 数据库操作、外部API调用等
await Task.CompletedTask;
}
}
注册自定义处理器
// 注册处理器(多种方式)
builder.Services.AddFeishuWebSocketServiceBuilder(builder.Configuration)
.UseMultiHandler()
.AddHandler<CustomEventHandler>() // 类型注册
.AddHandler(sp => new FactoryEventHandler( // 工厂注册
sp.GetService<ILogger<FactoryEventHandler>>()))
.AddHandler(new InstanceEventHandler()); // 实例注册
// 或使用建造者模式
builder.Services.AddFeishuWebSocketBuilder()
.UseMultiHandler()
.AddHandler<CustomEventHandler>()
.Build();
运行时动态注册
public class ServiceManager
{
private readonly IFeishuEventHandlerFactory _factory;
private readonly ILogger<ServiceManager> _logger;
public ServiceManager(IFeishuEventHandlerFactory factory, ILogger<ServiceManager> logger)
{
_factory = factory;
_logger = logger;
}
public void RegisterHandler()
{
var customHandler = new CustomEventHandler(_logger);
_factory.RegisterHandler(customHandler);
_logger.LogInformation("已注册自定义处理器: {HandlerType}", typeof(CustomEventHandler).Name);
}
}
⚙️ 配置选项
WebSocket配置
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
AutoReconnect |
bool | true | 自动重连 |
MaxReconnectAttempts |
int | 5 | 最大重连次数 |
ReconnectDelayMs |
int | 5000 | 重连延迟(ms) |
HeartbeatIntervalMs |
int | 30000 | 心跳间隔(ms) |
ConnectionTimeoutMs |
int | 10000 | 连接超时(ms) |
ReceiveBufferSize |
int | 4096 | 接收缓冲区大小 |
EnableLogging |
bool | true | 启用日志 |
EnableMessageQueue |
bool | true | 启用消息队列 |
MessageQueueCapacity |
int | 1000 | 消息队列容量 |
ParallelMultiHandlers |
bool | true | 多处理器并行执行 |
⚙️ 配置选项
主要配置项
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
AutoReconnect |
bool | true | 自动重连 |
MaxReconnectAttempts |
int | 5 | 最大重连次数 |
ReconnectDelayMs |
int | 5000 | 重连延迟(ms) |
HeartbeatIntervalMs |
int | 30000 | 心跳间隔(ms) |
EnableLogging |
bool | true | 启用日志 |
EnableMessageQueue |
bool | true | 启用消息队列 |
🎯 高级用法
多环境配置
var webSocketBuilder = builder.Services.AddFeishuWebSocketServiceBuilder(configuration);
if (builder.Environment.IsDevelopment())
{
webSocketBuilder.ConfigureOptions(options => {
options.EnableLogging = true;
options.HeartbeatIntervalMs = 15000;
});
}
else
{
webSocketBuilder.ConfigureFrom(configuration, "Production:WebSocket");
}
webSocketBuilder.UseMultiHandler()
.AddHandler<DevEventHandler>()
.AddHandler<ProdEventHandler>()
.Build();
条件性处理器注册
builder.Services.AddFeishuWebSocketServiceBuilder(configuration)
.UseMultiHandler()
.AddHandler<BaseEventHandler>()
.Apply(webSocketBuilder => {
if (configuration.GetValue<bool>("Features:EnableAudit"))
webSocketBuilder.AddHandler<AuditEventHandler>();
if (configuration.GetValue<bool>("Features:EnableAnalytics"))
webSocketBuilder.AddHandler<AnalyticsEventHandler>();
})
.Build();
🔧 高级功能
手动连接控制
public class ConnectionService
{
private readonly IFeishuWebSocketManager _manager;
public ConnectionService(IFeishuWebSocketManager manager)
=> _manager = manager;
// 连接管理
public async Task StartAsync() => await _manager.StartAsync();
public async Task StopAsync() => await _manager.StopAsync();
public async Task ReconnectAsync() => await _manager.ReconnectAsync();
// 消息操作
public async Task SendMessageAsync(string message)
=> await _manager.SendMessageAsync(message);
// 事件订阅
public void SubscribeEvents()
{
_manager.Connected += OnConnected;
_manager.Disconnected += OnDisconnected;
_manager.HeartbeatReceived += OnHeartbeat;
}
}
📋 支持的事件类型
WebSocket 消息类型
ping/pong- 连接保活heartbeat- 心跳消息event- 业务事件auth- 认证响应
主要业务事件
- 消息:
im.message.receive_v1,im.message.message_read_v1 - 群聊:
im.chat.member.user_added_v1,im.chat.member.user_deleted_v1 - 用户:
contact.user.created_v3,contact.user.updated_v3,contact.user.deleted_v3 - 部门:
contact.department.*_v3 - 审批:
approval.approval.*_v1 - 日程:
calendar.event.updated_v4 - 会议:
meeting.meeting.*_v1
📄 许可证
本项目遵循 MIT 许可证进行分发和使用。
🚀 立即开始使用飞书WebSocket客户端,构建稳定可靠的事件处理系统!
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- Microsoft.Extensions.Configuration.Binder (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Http (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- Mud.Feishu (>= 1.0.6)
- Mud.Feishu.Abstractions (>= 1.0.6)
- protobuf-net (>= 3.2.56)
-
net6.0
- Microsoft.Extensions.Configuration.Binder (>= 8.0.2)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.1)
- Microsoft.Extensions.Http (>= 8.0.1)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- Microsoft.Extensions.Options (>= 8.0.2)
- Mud.Feishu (>= 1.0.6)
- Mud.Feishu.Abstractions (>= 1.0.6)
- protobuf-net (>= 3.2.56)
-
net7.0
- Microsoft.Extensions.Configuration.Binder (>= 8.0.2)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.1)
- Microsoft.Extensions.Http (>= 8.0.1)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- Microsoft.Extensions.Options (>= 8.0.2)
- Mud.Feishu (>= 1.0.6)
- Mud.Feishu.Abstractions (>= 1.0.6)
- protobuf-net (>= 3.2.56)
-
net8.0
- Microsoft.Extensions.Configuration.Binder (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Http (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- Mud.Feishu (>= 1.0.6)
- Mud.Feishu.Abstractions (>= 1.0.6)
- protobuf-net (>= 3.2.56)
-
net9.0
- Microsoft.Extensions.Configuration.Binder (>= 10.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Http (>= 10.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.0)
- Microsoft.Extensions.Options (>= 10.0.0)
- Mud.Feishu (>= 1.0.6)
- Mud.Feishu.Abstractions (>= 1.0.6)
- protobuf-net (>= 3.2.56)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.