【问题标题】:Apache Thrift: Terminate Connection from the ServerApache Thrift:终止来自服务器的连接
【发布时间】:2017-10-16 13:57:42
【问题描述】:

我正在使用 thrift 来提供设备和管理控制台之间的接口。一次最多可以有 4 个与设备的活动连接,我使用 TThreadPool 服务器进行此操作。

问题出现在客户端断开连接;如果客户端正确断开连接,则没有问题,但是如果没有(即客户端崩溃或未调用 client->close()),则服务器似乎使该客户端线程保持活动状态。这意味着当进行下一次连接尝试时,客户端会挂起,因为服务器已用完其分配的线程池,因此无法为新请求提供服务。

我找不到任何标准的公共机制,如果客户端在设定的时间段内没有使用接口,服务器可以通过该机制停止并因此释放客户端线程?

thrift 中是否有标准的方法来促进这一点?

【问题讨论】:

  • 理论上,服务器迟早会发现连接断开并将线程返回到池中。你能提供MCVE吗?

标签: c++ interface embedded threadpool thrift


【解决方案1】:

在服务器套接字上设置接收/发送超时可能会有所帮助。服务器将在超时时关闭连接。

https://github.com/apache/thrift/blob/129f332d72facda5d06f87e2b4e5e08bea0b6b44/lib/cpp/src/thrift/transport/TServerSocket.h#L103

  void setSendTimeout(int sendTimeout);
  void setRecvTimeout(int recvTimeout);

【讨论】:

    猜你喜欢
    • 2017-08-20
    • 2018-01-21
    • 2014-02-26
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2019-01-21
    相关资源
    最近更新 更多