1

Tokio 的TcpStream具有

pub fn into_split(self) -> (OwnedReadHalf, OwnedWriteHalf)

返回此元组的方法,其中每个元素都实现AsyncWriteAsyncRead。这样我就可以创建一个 HTTP 客户端来接受实现AsyncWriteAsyncRead.

我找不到任何类似的UdpSocket概念。所以,如果我正在编写一个使用 tokio 的库,UdpSocket那么我不能接受其他实现,UdpSocket因为它不是一个特征。

有什么我想念的吗?我希望我的客户使用UdpSocket,但用户也可以提供他们自己的异步实现UdpSocket

4

1 回答 1

0

UdpFramed是你想要的,来自tokio_utilcrate。

底层 UdpSocket 的统一 Stream 和 Sink 接口,使用 Encoder 和 Decoder 特征对帧进行编码和解码。

更贴近你:

如果您想更直接地使用流和接收器,请考虑在此方法返回的 UdpFramed 上调用split,这会将它们分解为单独的对象,从而使它们更容易交互。

看起来Sink一半是免费继承AsyncWrite的(根据tokio docs),但是将Stream一半变成AsyncRead需要使用另一个tokio-util结构:StreamReader

将字节块流转换为 AsyncRead。

于 2021-08-06T03:22:25.240 回答