实时通信
当你需要"在线用户数/通知推送/前端实时刷新"能力时,从这里开始。
youlai-aspnet 采用 SSE(Server-Sent Events) 提供实时能力,基于 Channel<T> 实现服务端推送,前端建立长连接后,后端可向客户端推送事件。
技术架构
SSE 接口
| 接口 | 方法 | 说明 |
|---|---|---|
/api/v1/sse/connect | GET | 建立 SSE 连接(需认证) |
/api/v1/sse/online-count | GET | 获取在线用户数 |
连接示例
bash
# SSE 连接测试(替换为实际 token)
curl -N -H "Authorization: Bearer <token>" http://localhost:8000/api/v1/sse/connect事件主题
| 事件名 | 说明 |
|---|---|
init | 连接建立成功 |
dict | 字典变更通知 |
online-count | 在线人数广播 |
notice | 通知公告推送 |
业务调用方式
csharp
// 广播字典变更
await _sseService.BroadcastDictChangeAsync("gender");
// 广播在线人数
await _sseService.BroadcastOnlineCountAsync();
// 向指定用户推送消息
await _sseService.SendToUserAsync("admin", "notice", payload);连接保护机制
| 保护策略 | 说明 |
|---|---|
| JWT 鉴权 | 连接时验证 Bearer Token |
| 心跳保活 | 定期发送注释事件,检测连接存活 |
| 异常清理 | 连接断开时自动清理 Channel 和在线状态 |
相关文件
| 文件 | 说明 |
|---|---|
Youlai.Api/Controllers/Message/SseController.cs | SSE 控制器 |
Youlai.Application/Common/ISseService.cs | SSE 服务接口 |
Youlai.Application/Common/SseService.cs | SSE 服务实现 |
Youlai.Application/Common/SseMessage.cs | SSE 消息模型 |
