我有一个设计要求,需要通过底层 TCP 网络模块进行 HTTP 通信
[HTTP_CLIENT<--->LOCAL_TCP_PSEUDOSERVER]---------TCP/IP--------[LOCAL_TCP_PSEUDOSERVER<--->HTTP_SERVER]
- HTTP 客户端与本地运行的 TCP 伪服务器对话
- 这个伪服务器与 TCP 伪服务器通信,后者又与 HTTP_SERVER 通信
整体功能按预期工作正常,但性能太低。
经过一些研究,我会提供一些解决方案,以下是相同的
a) HTTP 是请求响应包有小数据包。该数据必须通过 TCP 传输,默认情况下启用 Nagle 算法因此我们应用TCP_NODELAY禁用 Nagle 算法,以便将小数据包无延迟地传递到远程主机。
b)使用 HTTP keep-alive。这将使 TCP 套接字打开,以便可以在不建立新连接的情况下发出另一个请求。
更新查询:简而言之,http 代理服务器如何如此高效地工作?
仅供参考:这是我提到的信息
设计问题 - 使用 Winsock 通过 TCP 发送小数据段
上述实验在一定程度上提高了性能,但我想还有很大的改进空间。方法是否正确?此外,还有哪些其他参数可能会影响性能?
更新 2
考虑 ABEF。AB , EF 是本地环回连接,其中 A 是 http 客户端,B 是伪服务器。E 是伪服务器,F 是 HTTP 服务器。BE 是简单的 TCP 套接字通信。
AB、EF通信是环回并重用同一个端口
整数 = 1; setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); bind(s, (struct sockaddr *) &sin, sizeof (sin));
AF 之间的性能总体上很慢
请分享您的宝贵意见
非常感谢