我正在开发一个TCP代理被摆在那应该从野生互联网500个1000的活动连接之间处理TCP服务的前面。
代理在同一台计算机作为服务运行,而且大多是透明的。 该服务是大部分不知道代理的,唯一的例外是客户的真正实现了远程IP地址的通知。
这意味着,对于每个入站打开TCP套接字,有服务器上的两个插槽:一对在代理的secondth,并在代理背后的真正的服务之一。
在两个代理套接字的发送和recv窗口大小设置为1024个字节。
什么是对这个性能影响? 如何缓慢是这个配置? 我应该把一些精力放在改变该服务使用命名管道(或其他IPC机制),或本地主机TCP套接字是大部分的有效IPC?
这两个应用程序的合并是不是一种选择。 现在,我们都坚持两个过程构成。
编辑 :其原因具有在同一硬件上两个分开的过程是100级%的经济性。 我们只有一台服务器,我们不打算在获得更多的(没有钱)。
TCP服务是在Visual Basic 6,它的增长超出了我们的预期遗留软件。 代理是C ++。 我们没有时间,钱也没有人力来改写和VB6代码迁移到现代的编程环境。
代理是我们试图减轻对服务,具体的性能问题的DDoS攻击 ,我们从时间去时间。
代理是开源的, 这里是该项目的源代码 。
这将是相同的(或至少不可测量的不同)。 Winsock的是足够聪明,知道如果它跟一个插座在同一台主机上,在这种情况下,它会短路几乎所有下面的IP和数据直接复制缓冲区到缓冲区。 在命名管道与插座而言,如果需要可能能够永远在未来的沟通,不同的机器上,选择插座。 如果你知道一个事实,你永远需要做的是,挑哪一个你的开发人员最熟悉或最舒服的。
对于来读这以后任何人,我想添加一些调查结果,即回答原来的问题。
对于我们正在开发一个工具,我们有一个可以使用命名管道,或TCP具有相同呼叫的网络课程。
下面是我们的测试系统上的典型的环回传送文件。
TCP / IP传输时间:2.5秒
命名管道传输时间:3.1秒
现在,如果你去外机并连接到您的网络上的远程计算机的命名管道性能差得多:
TCP / IP传输时间:12秒
命名管道传输时间:2.5分钟(是分钟!)
我知道,这仅仅是一个系统(Windows 7),但我认为这是一个缓慢的命名管道怎么能是一个很好的指标......而且好像TCP是要走的路。
http://msdn.microsoft.com/en-us/library/aa178138(v=sql.80).aspx
让我来总结一下你。 如果你担心性能,然后使用TCP / IP。 但是,如果你有一个非常快速的网络和你不担心性能则命名管道将是“整洁”,因为它可能会节省你一些代码。
更何况,如果你坚持到TCP,那么你将有什么事情,可以缩放,并在时机成熟时,即使负载平衡。
干杯,
我知道这个话题很老了,但它仍然是相关的我,也许别人会看这在未来也是如此。
我的Excel(VBA)和另一个进程之间执行IPC在同一台机器上,两者通过TCP连接以及经由命名管道。
以快速性能测试中,我提交比从客户端(Excel)中包括了26个字节的消息到服务器(未Excel)中,并等待来自其它过程(其中包括在例如12个字节)的应答消息。 我此在一个循环中执行一吨的时间和测得的平均执行时间。
随着TCP在本地主机上(Windows 7中,没有快速路径),一个“对话”(请求+回复)花了大约300-350微秒。 尤其是发送数据是相当慢(发送26个字节花了约通过TCP 200microseconds)。 使用命名管道,一个谈话了平均约60毫秒 - 因此速度快了很多。
我不完全知道为什么差异如此之大。 我测试了在企业环境中有严格的防火墙,包检查,并没有什么,所以我觉得这个可能,因为即使是基于本地主机的TCP连接,通过安全的措施去显著减缓下来已经造成,而命名管道的人可能没。
TL:DR:在我的情况下,命名管道比TCP更快的小型封装周围5-6倍(没有和那些大测试尚)
在你描述的情况下,本地TCP连接是不太可能成为一个瓶颈。 讲座将介绍一些开销,当然,不过这应该是微不足道的,除非你的CPU已经是热的运行。
在猜测,如果您的服务器的CPU使用率通常低于50%左右(与地方代理),这是不值得担心尽量减少与本地TCP连接相关的开销。
如果CPU占用率经常在80%以上,你或许应该做一些剖析。 我想通过比较CPU负载(或者更好的是,性能,如果你能有意义的衡量)当代理在适当的位置时它是无法启动。 除非代理服务器正在做一些复杂的处理,与额外的TCP连接相关的开销可能是由代理引入的总开销的显著部分,所以应该给你至少一个订单的数量级估计多少你”通过使用IPC的更有效的形式d增益。
什么是在同一台机器上的代理,只是好奇的原因是什么?
无论如何:
有对IPC,TCP / IP的几种方法,命名管道是在速度和复杂媲美。 如果你真的想要的东西,很好地进行扩展,且几乎无开销:使用共享内存。 最好组合使用一锁定自由算法用于推进指针(或用于每个读取器的一个缓冲器(代理/服务)和写入器(服务/代理))。
文章来源: How slow are TCP sockets compared to named pipes on Windows for localhost IPC?