【发布时间】:2019-10-16 12:55:24
【问题描述】:
好的,这里有一点上下文: 我有一个在嵌入式系统上运行的应用程序,它按以下时间间隔通过 HTTP(在 C++ 中使用 libcurl)发送几个不同的请求: 5分钟 15分钟 1小时 24小时
我的目标:减少数据消耗(通过蜂窝网络运行)
我们同时拥有客户端和服务器端的 TLS 身份验证,因此握手成本很高。我们的想法是我们使用持久连接(至少对于较短间隔的文件)来避免每次都进行握手。
不幸的是,经过多次修改后,我发现服务器在间隔过去之前关闭了连接。也许这是我们可以扩展的东西?我得和服务器端的人谈谈。
我的印象是“TCP keep-alive”数据包存在的原因,但据说那些“检查连接”而不是“保持打开”,就像名字所暗示的那样。
我的想法是这样的:
让我的应用每 2 分钟左右(不管超时有多长)发送一个数据包(尽可能小),以“推动”连接保持打开状态。
我的问题是:
- 这有意义吗?
- 我认为在 libcurl 中没有简单的方法可以做到这一点吗?
- 如果是这样,我们可以得到多小的请求?
- 有更简单的方法吗?我唯一的问题是所有连接的东西都“存在”在 libcurl 中。
谢谢!
【问题讨论】:
-
请注意,您为使连接保持打开状态所做的任何事情都会增加带宽成本,可能会大大增加。
-
是的,我已经考虑过了。计划是实施这样的事情并进行一些测试以比较数字。可能只需要为较短的上传间隔实现它。如果可能的话,还希望将我发送的任何内容减少到 50 字节以下。
-
能否加密数据并切换到 HTTP / 删除 TLS 身份验证步骤? (可能在建立初始 TLS 连接以首先交换一些密钥之后。)
标签: c++ http libcurl keep-alive