【发布时间】:2012-06-08 00:14:09
【问题描述】:
我正在开发一个 TCP 代理,放在一个 TCP 服务前面,该服务应该处理来自外部 Internet 的 500 到 1000 个活动连接。
代理与服务在同一台机器上运行,并且大部分是透明的。该服务在很大程度上不知道代理,唯一的例外是通知客户端的真实远程 IP 地址。
这意味着,对于每个入站打开的 TCP 套接字,服务器上还有两个套接字:代理中的第二个套接字,以及代理后面的真实服务上的一个。
两个代理套接字上的发送和接收窗口大小设置为 1024 字节。
这对性能有何影响?这个配置有多慢?我应该努力改变服务以使用命名管道(或其他 IPC 机制),还是 localhost TCP 套接字在很大程度上是一个高效的 IPC?
这两个应用程序的合并不是一个选项。现在我们被两个进程配置卡住了。
编辑:在同一硬件上拥有两个独立进程的原因是 100% 经济性。我们只有一台服务器,我们不打算获得更多(没有钱)。
TCP 服务是 Visual Basic 6 中的旧版软件,其发展超出了我们的预期。代理是 C++。我们没有时间、金钱和人力来重写 VB6 代码并将其迁移到现代编程环境。
代理是我们尝试缓解服务上的特定性能问题,我们不时收到DDoS attack。
【问题讨论】:
-
主机内 TCP 连接将在任何值得其盐的现代网络堆栈上尽可能高效地实现(阅读:作为双向本地管道,或等效的东西),所以我如果在此用例中 TCP 和命名管道之间存在明显的性能差异,我会感到惊讶(并且对 Microsoft 有点失望)。
-
@JeremyFriesner 我同意你的观点,我想假设“Windows Server 2008”就是这种情况。
标签: windows performance sockets named-pipes