惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
GbyAI
GbyAI
博客园 - 司徒正美
美团技术团队
Vercel News
Vercel News
IT之家
IT之家
U
Unit 42
Y
Y Combinator Blog
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
V
Visual Studio Blog
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MyScale Blog
MyScale Blog
博客园 - 叶小钗
A
About on SuperTechFans
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
B
Blog RSS Feed

博客园 - Eric zhou

Github Project-AI Agentic Framework (.NET) 我不是给 AI 装了一堆插件,我是在搭一套工作能力系统 我不是在用 AI 助手,我在把自己的能力沉淀成组织资产 .NET 10 新特性概览与相关文章索引 .NET 10 & C# 14 New Features 新增功能介绍-ASP.NET Core 基于Microsoft.Extensions.AI 和 Microsoft.Extensions.VectorData构建向量搜索 Windows 安装 OpenClaw 踩坑全记录:Node、Git、CMake、VS Build Tools 一次解决 .NET 10 & C# 14 New Features 新增功能介绍-.NET CLI工具改进 .NET 10 & C# 14 New Features 新增功能介绍-再看Top Level Program .NET 10 & C# 14 New Features 新增功能介绍-带修饰符的简单 lambda 参数 .NET 10 & C# 14 New Features 新增功能介绍-Null 条件分配(Null-conditional assignment) .NET 10 & C# 14 New Features 新增功能介绍-field关键字 .NET 10 & C# 14 New Features 新增功能介绍-扩展成员Extension Members 基于.NET和C#构建光伏IoT物模型方案 总结归纳.NET 10 中 Minimal APIs 主要应用场景 .NET 10 New feature 新增功能介绍-Minimal APIs增强 Google A2UI本地部署记录 .NET10 New feature 新增功能介绍-类库新增功能 关于Agentic AI的一些总结和思考 .NET10 New feature 新增功能介绍-JIT编译器改进
.NET 10 New feature 新增功能介绍-WebSocket功能增强
Eric zhou · 2026-01-05 · via 博客园 - Eric zhou

今天整理了.NET 10类库新增的几个常用功能,按老规矩,分享给大家:

.NET 10 新增了 WebSocketStream一个新的 API,用于简化 .NET 中一些最常见的WebSocket 的流式处理方案。

传统 WebSocket API 级别较低,需要大量的代码:处理缓冲和框架、重建消息、管理编码/解码以及编写自定义包装器以与流、通道或其他传输抽象集成。

这些复杂性使得很难将 WebSocket 用作传输,尤其是对于具有流式处理或基于文本的协议或事件驱动的处理程序的应用。

WebSocketStream 通过提供 Stream基于 WebSocket 的抽象来解决这个难题。

这样就可以与现有 API 无缝集成,以便读取、写入和分析数据,无论是二进制数据还是文本,并减少了手动管道的需求。

WebSocketStream 为常见的 WebSocket 生产环境应用启用了高级高阶API。

WebSocketStream 到底解决了什么问题

在 .NET 10 之前:

  • System.Net.WebSockets.WebSocket

    • 消息模型(Message-based)

    • 必须自己处理:

      • 分片(Fragment)

      • 消息边界

      • 循环 Receive / Send

    • 无法像 Stream 一样统一抽象

结果是:

  • WebSocket 写法 复杂、重复、易错

  • 很难和现有 Stream 生态(压缩、加密、管道、序列化)整合

  • WebSocket 和 TCP / NamedPipe / HTTP Body 的编程模型割裂

 WebSocketStream 的本质变化

 .NET 10 提供的 WebSocketStream

把 WebSocket 连接抽象为一个真正的 Stream

这意味着:

  • 不再关心消息帧、分片、边界

  • 可以直接:

    • ReadAsync

    • WriteAsync

  • 能无缝接入:

    • PipeReader / PipeWriter

    • System.IO.Stream 全套中间件

     这是一次模型级升级,而不是语法糖

 给出一个示例代码:

using System;
using System.IO;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

// Streaming binary protocol (for example, AMQP).
Stream transportStream = WebSocketStream.Create(
    connectedWebSocket,
    WebSocketMessageType.Binary,
    closeTimeout: TimeSpan.FromSeconds(10));
await message.SerializeToStreamAsync(transportStream, cancellationToken);
var receivePayload = new byte[payloadLength];
await transportStream.ReadExactlyAsync(receivePayload, cancellationToken);
transportStream.Dispose();
// `Dispose` automatically handles closing handshake.
流式处理文本协议(例如 STOMP)
using System.IO;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

// Streaming text protocol (for example, STOMP).
using Stream transportStream = WebSocketStream.Create(
    connectedWebSocket, 
    WebSocketMessageType.Text,
    ownsWebSocket: true);
// Integration with Stream-based APIs.
// Don't close the stream, as it's also used for writing.
using var transportReader = new StreamReader(transportStream, leaveOpen: true); 
var line = await transportReader.ReadLineAsync(cancellationToken); // Automatic UTF-8 and new line handling.
transportStream.Dispose(); // Automatic closing handshake handling on `Dispose`.
流式处理二进制协议(例如 AMQP)
using System;
using System.IO;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

// Streaming binary protocol (for example, AMQP).
Stream transportStream = WebSocketStream.Create(
    connectedWebSocket,
    WebSocketMessageType.Binary,
    closeTimeout: TimeSpan.FromSeconds(10));
await message.SerializeToStreamAsync(transportStream, cancellationToken);
var receivePayload = new byte[payloadLength];
await transportStream.ReadExactlyAsync(receivePayload, cancellationToken);
transportStream.Dispose();
// `Dispose` automatically handles closing handshake.
以流形式读取单个消息(例如 JSON 反序列化)
using System.IO;
using System.Net.WebSockets;
using System.Text.Json;

// Reading a single message as a stream (for example, JSON deserialization).
using Stream messageStream = WebSocketStream.CreateReadableMessageStream(connectedWebSocket, WebSocketMessageType.Text);
// JsonSerializer.DeserializeAsync reads until the end of stream.
var appMessage = await JsonSerializer.DeserializeAsync<AppMessage>(messageStream);
将单个消息编写为流(例如,二进制序列化)
using System;
using System.IO;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

// Writing a single message as a stream (for example, binary serialization).
public async Task SendMessageAsync(AppMessage message, CancellationToken cancellationToken)
{
    using Stream messageStream = WebSocketStream.CreateWritableMessageStream(_connectedWebSocket, WebSocketMessageType.Binary);
    foreach (ReadOnlyMemory<byte> chunk in message.SplitToChunks())
    {
        await messageStream.WriteAsync(chunk, cancellationToken);
    }
} // EOM sent on messageStream.Dispose().

总结:WebSocketStream 的真实应用场景

场景一:实时数据流(Streaming Data)

典型业务

  • 充电站实时状态推送(功率、电流、电压)

  • 实时监控大屏(指标流)

  • 行情 / 订单流

  • 日志 / Trace 实时订阅

 使用 WebSocketStream 后WebSocket = 一条持续的数据流

 场景二:AI / LLM 实时输出(Token Streaming)

 典型业务

  • 大模型推理流式返回

  • Copilot / Chat / Agent 推理过程

  • SSE + WebSocket 混合方案

 场景三:大文件 / 二进制流实时传输

using var file = File.OpenRead(path);
await file.CopyToAsync(webSocketStream);

 更像 TCP,但仍是 WebSocket

 场景四:RPC / 协议隧道(Protocol Tunneling)

  • 可以直接跑 已有 Stream 协议

    • gRPC-like

    • 自定义 framing

    • 设备通信协议

      await protocolHandler.RunAsync(webSocketStream);

场景五:与 System.IO.Pipelines 深度整合

构建高性能服务端

var reader = PipeReader.Create(webSocketStream);
var writer = PipeWriter.Create(webSocketStream);

  • 用 Pipelines 做:

    • 高性能解析

    • 零拷贝处理

  • 和 Kestrel / gRPC / 自研协议一致

 适合:

  • 高频实时通信

  • 百万级连接服务

  • 核心中枢服务

 以上总结,分享给大家。

周国庆

2026/1/5