C# WCF或自定义套接字体系结构
我正在编写一个客户机/服务器体系结构,其中在多个虚拟机上可能会有数百个客户机,大部分在intranet上,但也有一些在其他位置 每个客户端将不断收集数据,并每隔大约一秒钟向服务器发送一条消息。每条消息的长度大约为128个字符C# WCF或自定义套接字体系结构,c#,wcf,sockets,C#,Wcf,Sockets,我正在编写一个客户机/服务器体系结构,其中在多个虚拟机上可能会有数百个客户机,大部分在intranet上,但也有一些在其他位置 每个客户端将不断收集数据,并每隔大约一秒钟向服务器发送一条消息。每条消息的长度大约为128个字符 我的问题是,对于这种在.NET中编写客户机/服务器的体系结构,我应该使用WCF还是以前编写的一些套接字代码。我需要可伸缩性(socket代码考虑到了这一点)、可靠性和处理那么多消息的能力。对于WCF服务来说,每秒100个请求听起来不太像,尤其是在负载很小的情况下。但是,使用
我的问题是,对于这种在.NET中编写客户机/服务器的体系结构,我应该使用WCF还是以前编写的一些套接字代码。我需要可伸缩性(socket代码考虑到了这一点)、可靠性和处理那么多消息的能力。对于WCF服务来说,每秒100个请求听起来不太像,尤其是在负载很小的情况下。但是,使用WCF服务设置一个简单的设置应该很快,一个echo方法只返回输入,然后用一堆线程和一个循环连接一个客户机
如果您已经有了一个可用的套接字实现,您可能会保留它,但如果没有,您可以选择WCF并将宝贵的开发时间花在其他地方。根据我使用WCF的经验,我可以告诉您,它在高负载下的性能非常好。特别是,您可以在多个绑定之间进行选择,以满足不同场景的需求(httpBinding用于外部通信,netPeerTcpBinding用于本地网络,例如) 如果不提供一些概念证明,我不会做出最终决定。创建非常简单的服务,托管它,并使用一些压力测试来获得真正的性能结果。而不是根据您的需求验证结果。您提到了邮件的数量,但没有提到预期的响应时间。目前讨论的类似问题是,与套接字相比,WCF的响应时间较慢 在您的帖子中没有直接提到其他要求,因此我将对最佳性能做一些假设:
- 使用netTcpBinding-最佳性能,二进制编码,需要.NET服务器/客户端。我猜您将使用Net.Tcp,因为您的另一个选择是直接套接字编程
- 如果不需要,请不要使用安全性-降低性能。对于内部网之外的客户机可能不可能李>
- 如果可能,在客户端上重用代理。如果重复使用同一个代理,则打开TCP连接的成本很高,每个代理将有一个连接。这将影响服务的实例化-默认情况下,单个服务实例将处理来自单个代理的所有请求
- 设置服务限制,以便您的服务主机为许多客户端做好准备