【问题标题】:How to detect tcp disconnected in tokio sink item in tokio-serde library?如何在 tokio-serde 库的 tokio sink 项中检测 tcp 断开连接?
【发布时间】:2021-03-17 19:00:40
【问题描述】:

我找到了一个名为 tokio-serde 的库,它将使用 tokio tcp 套接字发送和接收数据,并使用 serde json 对其进行序列化和反序列化。

有两个示例将展示如何使用此库创建服务器和客户端。

在此示例中,您可以了解如何使用serialized 对象发送数据。

serialized
        .send(json!({...}));

https://github.com/carllerche/tokio-serde/blob/master/examples/client.rs

所以我创建了一个服务器应用程序并将serialized 对象存储在一个向量中,以便稍后向它们发送消息。 但出于任何原因,这些连接可能会断开,并且对等客户端可能不可用。

我的问题是如何使用serialized 对象检测客户端何时断开连接?

我搜索了文档,但找不到任何解决方案。

非常感谢任何帮助。非常感谢。

【问题讨论】:

  • 一般来说,如果另一端已断开连接,则在读取或写入流时会出错。 Tokio-serde 看起来只是遵循底层错误类型,即std::io::Error。除此之外,您可以在TcpStream 上使用.ready() 对其进行探测,并以这种方式检测任何错误。

标签: rust serde rust-tokio


【解决方案1】:

根据@kmdreko 评论。我尝试访问底层TcpSocket 并使用它检测断开状态。

这样的事情将有助于确定客户端是否断开连接:

if serialized.get_ref().get_ref().as_ref().ready(Interest::WRITABLE).await.is_err() { 
    // Connection error
}

我知道有很多 get_ref() 电话,但这是我现在发现的。

【讨论】:

    猜你喜欢
    • 2023-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    相关资源
    最近更新 更多