我在0.13.0版本中使用apache thrift。只要两次调用之间的时间大约为1.5秒,连接就会关闭。超时时间从1.3秒到1.8秒不等。
keepAlive设置在服务器端和客户端。我尝试了不同的rx,tx,但这并没有改变任何东西。我的用于测试的客户端代码如下。客户端使用的是windows,而服务器运行的是linux。
for (int i = 0; i < 100'000;i+=50){
remote_method();
auto sleep = std::chrono::milliseconds(i);
std::cout << "Sleep: " << i << "\n";
std::this_thread::sleep_for(sleep);
}Thrift将在下面的代码片段中抛出异常,该代码片段位于TSocket.cpp中
// Timed out!
if (errno_copy == THRIFT_ETIMEDOUT) {
throw TTransportException(TTransportException::TIMED_OUT, "THRIFT_ETIMEDOUT");
}看起来在这段时间之后有什么东西在重置连接。如果以高频率调用该方法,则不会发生超时。
发布于 2020-08-13 23:26:13
Thrift工作正常,其他基于套接字的通信也显示出这种行为。根本原因是运行服务器的VMware虚拟机。网络模式(桥接、NAT或仅主机)没有影响。通过将服务器移动到物理机,这个问题就解决了。很可能是linux的网络配置有问题。
https://stackoverflow.com/questions/63384714
复制相似问题