我正在开发一个 TCP 代理,放在一个 TCP 服务前面,该服务应该处理来自野外 Internet 的 500 到 1000 个活动连接。
代理与服务在同一台机器上运行,并且大部分是透明的。该服务在很大程度上不知道代理,唯一的例外是通知客户端的真实远程 IP 地址。
这意味着,对于每个入站打开的 TCP 套接字,服务器上还有两个套接字:代理中的第二个套接字,以及代理后面的真实服务上的一个。
两个代理套接字上的发送和接收窗口大小设置为 1024 字节。
这对性能有何影响?这个配置有多慢?我是否应该努力将服务更改为使用命名管道(或其他 IPC 机制),或者 localhost TCP 套接字在很大程度上是一个高效的 IPC?
两个应用程序的合并不是一种选择。现在我们被两个进程配置困住了。
编辑:在同一硬件上拥有两个独立进程的原因是 100% 的经济性。我们只有一台服务器,我们不打算获得更多(没有钱)。
TCP 服务是 Visual Basic 6 中的遗留软件,其发展超出了我们的预期。代理是 C++。我们没有时间、金钱和人力来重写 VB6 代码并将其迁移到现代编程环境。
代理是我们试图缓解服务上的特定性能问题的尝试,这是我们不时遇到的DDoS 攻击。
代理是开源的,这里是项目源码。