c++ - 重用 Asio 连接

标签 c++ http tcp boost-asio keep-alive

我目前正在开发一个项目,其中有一个网络服务器。我必须添加这种功能,以便对于每个请求,我需要向其他服务器发送多个请求,获取响应,然后将结果发送回原始客户端。这些服务器的吞吐量很高,因此我担心套接字的数量以及设置新线程/套接字以通过许多套接字发送许多请求的速度。所以我开始认为向每个客户端开放一个(或几个连接)将有助于解决这个问题。我不确定持久连接和 boost ASIO 是如何工作的。我有一些问题:

-如何使用 ASIO tcp 套接字设置保持事件时间。

-我可以通过同一个套接字发送多个并发请求吗?我会遇到结果顺序的问题吗(每个结果都应该有一个 ID,所以我的意思不是乱序发送结果中的顺序,而是更多的数据包顺序,如果响应超过一个数据包,我会对数据包的顺序有问题吗?)。

如果这也很重要的话,所有请求都是 HTTP GET/POST 请求。

有关此主题的任何信息将不胜感激。谢谢。

最佳答案

TCP套接字充当数据流,您在一端写入的数据将在另一端以相同的顺序接收。如果您的协议(protocol)可以处理,您可以通过同一个套接字发送多个请求。

您提到了并发请求,因此您需要非常小心,不要交错两个不同请求的写入调用。如果您可以确保每个结果都是原子写入的,那么我认为使用套接字进行多个请求没有问题(您可以使用回复队列来做到这一点)。

可以设置标准套接字保持事件here .

关于c++ - 重用 Asio 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16021988/

相关文章:

c++ - 之前预期的主要表达。 token

c++ - 如何使函数接受任意数量的参数而不使用 f(...)?

http - SSL 证书未在 Google Chrome 中验证

ipv6 的 Linux tcp 设置

c - C中的多线程TCP聊天

c++ - 使用 DirectX/C++ 在不同位置渲染多个网格对象的有效方法

c++ - Xcode:严格的 C 编译?

c++ - C++ 的 HTTP 和 HTTPS 服务器库

Java HTTP 代理。何时关闭套接字?

java - 通过 TCP 连接向 "localhost"发送 HTTPGET 请求