dotnet/Nerdbank.Streams

GitHub: dotnet/Nerdbank.Streams

为 .NET 提供专用 Stream 与管道工具,支持全双工进程内通信、多路复用和 WebSocket 适配。

Stars: 712 | Forks: 72

# 专用的 .NET Stream 类 [![NuGet package](https://img.shields.io/nuget/v/Nerdbank.Streams.svg)](https://www.nuget.org/packages/Nerdbank.Streams) [![Build Status](https://dev.azure.com/andrewarnott/OSS/_apis/build/status/Nerdbank.Streams)](https://dev.azure.com/andrewarnott/OSS/_build/latest?definitionId=14) [![codecov](https://codecov.io/gh/AArnott/Nerdbank.Streams/branch/main/graph/badge.svg)](https://codecov.io/gh/AArnott/Nerdbank.Streams) *用于进程内或跨互联网通信的增强型 Stream。* ## 特性 1. [`SimplexStream`](https://dotnet.github.io/Nerdbank.Streams/docs/SimplexStream.html) 旨在允许两方进行*单向*通信。 任何写入该 stream 的内容随后都可以从中读取。您可以将这个 `Stream` 共享给任意两方(在同一个 AppDomain 中),一方可以向另一方发送消息。 2. [`FullDuplexStream`](https://dotnet.github.io/Nerdbank.Streams/docs/FullDuplexStream.html) 为进程内双向通信创建一对双向 stream;它也可以从两个 单向 stream 创建一个双向 stream。 3. [`MultiplexingStream`](https://dotnet.github.io/Nerdbank.Streams/docs/MultiplexingStream.html) 允许您将任何双向 .NET Stream 拆分为多个子 stream(称为 channel)。这使得双方只需建立 一个传输 stream(例如 named pipe 或 web socket),并将其用于许多独立的 协议。例如,可以在一个 channel 上设置 JSON-RPC,并使用其他 channel 进行 高效的二进制传输。 4. [`AsStream()`](https://dotnet.github.io/Nerdbank.Streams/docs/AsStream.html) 使用 `System.IO.Stream` 包装 `WebSocket`、`System.IO.Pipelines.PipeReader`、 `System.IO.Pipelines.PipeWriter` 或 `System.IO.Pipelines.IDuplexPipe`,以供读取和/或写入。 5. [`UsePipe()`](https://dotnet.github.io/Nerdbank.Streams/docs/UsePipe.html) 允许使用 `PipeReader` 和 `PipeWriter` API 读取 和写入 `Stream` 或 `WebSocket`。 6. [`Stream.ReadSlice(long)`](https://dotnet.github.io/Nerdbank.Streams/docs/ReadSlice.html) 创建一个在给定字节数之后结束的子 stream。 7. [`PipeReader.ReadSlice(long)`](https://dotnet.github.io/Nerdbank.Streams/docs/ReadSlice.html) 创建一个在给定字节数之后结束的子 `PipeReader`。 8. [`MonitoringStream`](https://dotnet.github.io/Nerdbank.Streams/docs/MonitoringStream.html) 包装另一个 Stream 并为 所有 I/O 调用引发事件,以便您可以监控和/或追踪通过的数据。 9. [`WriteSubstream` 和 `ReadSubstream`](https://dotnet.github.io/Nerdbank.Streams/docs/Substream.html) 允许您将未知长度的数据序列化为更大 stream 的一部分,然后在读取子 stream 时对其进行反序列化,这样您读取的字节数就不会超过写入的字节数。 10. [`Sequence`](https://dotnet.github.io/Nerdbank.Streams/docs/Sequence.html) 是 `ReadOnlySequence` 的构建器。 11. [`PrefixingBufferWriter`](https://dotnet.github.io/Nerdbank.Streams/docs/PrefixingBufferWriter.html) 包装另一个 `IBufferWriter`,允许在下一个写入的 buffer 前面添加一些 header,该 buffer 的长度可以是任意的。 12. [`BufferTextWriter`](https://dotnet.github.io/Nerdbank.Streams/docs/BufferTextWriter.html) 是一个派生自 `TextWriter` 的类型,可以 直接写入任何 `IBufferWriter`,这使其比 `StreamWriter` 具有更高的可重用性,从而允许在多个 writer 之间进行无内存分配的写入。 13. [`SequenceTextReader`](https://dotnet.github.io/Nerdbank.Streams/docs/SequenceTextReader.html) 是一个派生自 `TextReader` 的类型,可以 直接从任何 `ReadOnlySequence` 读取,这使其比 `StreamReader` 具有更高的可重用性,从而允许在多个 sequence 之间进行无内存分配的读取。 14. [`DuplexPipe`](https://dotnet.github.io/Nerdbank.Streams/docs/DuplexPipe.html) 是 `IDuplexPipe` 的一个简单实现。 15. [`Stream.ReadBlockAsync`](https://dotnet.github.io/Nerdbank.Streams/docs/ReadBlockAsync.html) 保证填满提供的 buffer,除非满足某些文档记载的条件,而不是常规 `ReadAsync` 仅保证提供至少 1 个字节。 ## .NET Foundation 本项目由 [.NET Foundation](https://dotnetfoundation.org) 提供支持。
标签:WebSockets, 多人体追踪, 多路复用, 数据流, 网络通信, 进程间通信