0

我有一个设计要求,需要通过底层 TCP 网络模块进行 HTTP 通信

[HTTP_CLIENT<--->LOCAL_TCP_PSEUDOSERVER]---------TCP/IP--------[LOCAL_TCP_PSEUDOSERVER<--->HTTP_SERVER]

  1. HTTP 客户端与本地运行的 TCP 伪服务器对话
  2. 这个伪服务器与 TCP 伪服务器通信,后者又与 HTTP_SERVER 通信

整体功能按预期工作正常,但性能太低。

经过一些研究,我会提供一些解决方案,以下是相同的

a) HTTP 是请求响应包有小数据包。该数据必须通过 TCP 传输,默认情况下启用 Nagle 算法因此我们应用TCP_NODELAY禁用 Nagle 算法,以便将小数据包无延迟地传递到远程主机。

b)使用 HTTP keep-alive。这将使 TCP 套接字打开,以便可以在不建立新连接的情况下发出另一个请求。

更新查询:简而言之,http 代理服务器如何如此高效地工作?

仅供参考:这是我提到的信息

优化 HTTP:保持活动和流水线

设计问题 - 使用 Winsock 通过 TCP 发送小数据段

HTTP/1.1、CSS1 和 PNG 的网络性能影响

HTTP 流水线 - 移动领域的重要内容

上述实验在一定程度上提高了性能,但我想还有很大的改进空间。方法是否正确?此外,还有哪些其他参数可能会影响性能?

更新 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 之间的性能总体上很慢

请分享您的宝贵意见

非常感谢

4

1 回答 1

2

您可以拥有N层代理,而不会承受N倍的延迟。显然,您的“伪服务器”的设计和实现严重错误。没有理由自己写,而且根据我在这里和其他类似论坛中看到的内容来看,大多数尝试过它的人似乎都对其进行了完整的哈希处理。

这些“伪服务器”实际上只是 HTTP 代理,没有理由不使用适当的代理,例如 Apache Squid 甚至 Apache HTTPD。

如果您发布一些代码,您可能会得到一些详细的评论。

于 2013-04-24T08:27:23.000 回答