1
我是HTTP新手,正在开发一个应用代理。 我想避免定义操作超时,而是依靠客户端来关闭连接。 我想知道这是否可能?检测HTTP客户端断开的HTTP代理
这里是一个非常简单化的伪代码
void handle_request(Request http_request, Response http_response)
{
string modified_request = parse(http_request);
response_from_server = remote_server->send_request(modified_request);
while(true) {
if(response_from_server ->wait_for_data(1000 /* milliseconds */)) {
http_response->write_data(response_from_server->read_data());
continue;
}
if(!http_response.check_if_the_client_connection_to_me_is_still_active()) // how to do this?
return;
}
}
}
另一种方式来问这个是:
-
在HTTP代理
- ,我可以使用超时从远程cilent和远程服务器,而不又增加了一次超时?
- 如何检测远程服务器或远程客户端是否超时?
顺便说一下,我正在使用Poco在C++中进行开发。
错误。 1.依靠'RST' + keep-alive通常足以检测死连接。 2. TCP保持活动超时是可配置的。 3.超时并不一定表示有问题,这是协议的问题。 OTOH一个*可能*想要暂停空闲客户端(维持TCP连接的客户端,但在应用级别上没有响应)。 – valdo
@valdo(1)TCP keepalive默认只在两小时后运行。代理服务器需要对死亡连接的反应更强。 (2)TCP超时确实是可配置的,*对于整个系统*,即每个连接*,如果你有必要的特权。*这是既不可取也不适用于大多数情况。 – EJP
至少在Windows中,使用winsock2 API,可以(也应该)配置每个套接字的TCP保持活动状态。 'WSAIoctl'与标志='SIO_KEEPALIVE_VALS' – valdo