我正在开发一个HTTPS
服务器,它接收到一个请求并且必须回答3个响应。前两个是线路确认,最后一个包含请求的信息。从boost asio发送多个响应给该浏览器
我正在使用我的网络浏览器(chrome)作为客户端。我想要的是以下内容:
- 浏览器(客户端)向服务器发送请求。
- 服务器发送第一个ACK(一个html页面),浏览器显示它。
- 两秒钟后,服务器发送另一个ACK(一个不同的html页面),浏览器显示它。
- 再过两秒钟后,服务器发送请求的信息(不同的html页面),浏览器显示它。
的问题是,浏览器只接收第一ACK,似乎它是看完后关闭套接字,甚至在HTTPS
头中的Connection
设置为keep-alive
。
有什么办法可以等待几个HTTPS
响应与网页浏览器?
来源
这包含由服务器执行的异步方法的时候了一份请愿书是由:
void handle_handshake(const boost::system::error_code& error)
{
if (!error)
{
boost::asio::async_read_until(socket_, request_, "\r\n\r\n",
boost::bind(&session::handle_read, this,
boost::asio::placeholders::error));
}
else
{
std::cout << "ERROR, deleting. " << __FILE__ << ":" << __LINE__ << std::endl;
delete this;
}
}
void handle_read(const boost::system::error_code& err)
{
if (!err)
{
std::string s = "some_response";
// First write. This write is received by the browser without problems.
boost::asio::async_write(socket_,
boost::asio::buffer(response),
boost::bind(&session::handle_write, this,
boost::asio::placeholders::error));
}
else
{
std::cout << "Error: " << err << "\n";
}
}
void handle_write(const boost::system::error_code& error)
{
if (!error)
{
if(n++ <= 2)
{
// Second and third writes.
// These ones are not read by the browser.
if(n == 1)
{
std::string s = "some_response2";
boost::asio::async_write(socket_,
boost::asio::buffer(response),
boost::bind(&session::handle_write, this,
boost::asio::placeholders::error));
}
else if (n==2)
{
std::string s = "some_response3";
boost::asio::async_write(socket_,
boost::asio::buffer(response),
boost::bind(&session::handle_write, this,
boost::asio::placeholders::error));
}
sleep(1);
}
}
else
{
std::cout << "ERROR, deleting: " << __FILE__ << ":" << __LINE__ << std::endl;
delete this;
}
}
你能不能显示代码片段? –