【问题标题】:twisted .loseConnection does not immediately lose connection?扭曲的 .loseConnection 不会立即失去连接?
【发布时间】:2010-12-27 20:51:56
【问题描述】:

我有一个连接了几个客户端的服务器。当按下 CTRL+C 时(即反应堆开始关闭),我想关闭所有连接,等到它们完全关闭,然后停止。我通过连接客户端的传输并调用.loseConnection() 来做到这一点。在本地连接的那些上,它们会立即断开连接。但是,在通过 Internet 连接的设备上,连接不会立即丢失。通信停止 - 关闭客户端程序甚至不再告诉服务器连接已终止,尽管它在调用 .loseConnection() 之前确实如此 - 但直到几分钟后,在我发送了一些心跳请求后,连接才被视为“丢失”从服务器。

我了解,如果连接中断,服务器无法知道,除非它尝试发送一些数据。但是,如果我特别要求关闭连接,为什么它不立即关闭/断开连接?我是不是调用了错误的函数?

【问题讨论】:

    标签: networking tcp network-programming connection twisted


    【解决方案1】:

    loseConnection 在关闭连接之前刷新写缓冲区。如果您不想等待这种情况发生,只需让反应堆在它停止之前停止。它们会以这种方式关闭,写入缓冲区中的所有未发送数据都会被丢弃。

    还有一个提议是添加一个 API 来丢弃写入缓冲区和断开连接,abortConnection

    【讨论】:

    • 我还不想关闭反应堆,我只想中止连接。所以目前没有办法这样做吗?
    • 我以为你想关闭反应堆,因为你在谈论 Ctrl-C。对于反应堆没有关闭的情况,需要实现 abortConnection (或类似的东西)。您可能还可以找到一些使用私有/未记录方法(如 transport.connectionLost)的方法,但这些方法可能并不总是受支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多