我有一个设计要求,需要通过底层TCP网络模块进行HTTP通信
[HTTP_CLIENT< ---> LOCAL_TCP_PSEUDOSERVER] --------- TCP / IP -------- [LOCAL_TCP_PSEUDOSERVER< ---> HTTP_SERVER]
整体功能正常运行,但效果太低。
经过一些研究,我很少有解决方案,下面是相同的
a)HTTP是请求响应数据包具有小数据包。此数据必须通过TCP传输,默认情况下启用Nagle算法 因此,我们应用 TCP_NODELAY 来禁用Nagle算法,以便将小数据包毫不拖延地传送到远程主机。
b)使用HTTP keep-alive 。这将使TCP套接字打开,以便在不设置新连接的情况下进行另一个请求。
更新了查询:Inshort,http代理服务器如何运作如此有效?
供参考: 这是我提到的信息
Optimizing HTTP: Keep-alive and Pipelining
Design issues - Sending small data segments over TCP with Winsock
Network Performance Effects of HTTP/1.1, CSS1, and PNG
HTTP Pipelining – Big in Mobile
上述实验在一个层面上提高了性能,但我认为有很大的改进。方法是否正确?此外,还有哪些其他参数会影响性能?
更新2
考虑A-B-E-F。 A-B,E-F是本地环回连接,其中A是http客户端,B是伪服务器。 E是伪服务器,F是HTTP服务器。 B-E是简单的TCP套接字通信。
A-B,E-F通信是环回并重用相同的端口
int on = 1; setsockopt(s,SOL_SOCKET,SO_REUSEADDR,& on,sizeof(on)); bind(s,(struct sockaddr *)& sin,sizeof(sin));
A-F
之间的表现整体缓慢请分享您的宝贵意见
非常感谢
答案 0 :(得分:2)
您可以拥有 N 代理层,而不会延迟 N 次延迟。显然,你的'伪服务器'的设计和实现严重错误。 没有理由自己编写,大多数尝试它的人似乎根据我在这里和其他类似论坛中看到的内容来制作它。
这些'伪服务器'实际上只是HTTP代理,没有理由不使用正确的代理,例如Apache Squid甚至Apache HTTPD。
如果您发布一些代码,您可能会得到一些详细的评论。