c# - WCF 或自定义套接字体系结构

标签 c# wcf sockets

我正在编写一个客户端/服务器架构,其中可能有数百个客户端位于多个虚拟机上,大部分位于 Intranet 上,但也有一些位于其他位置。

每个客户端都将不断收集数据并大约每秒向服务器发送一条消息。每条消息的长度可能约为 128 个字符。

我的问题是,对于我在 .NET 中编写客户端/服务器的这种架构,我应该使用 WCF 还是我以前编写的一些套接字代码。我需要可伸缩性(套接字代码考虑到了这一点)、可靠性以及处理那么多消息的能力。

最佳答案

如果不进行一些概念验证,我不会做出最终决定。创建非常简单的服务,托管它并使用一些压力测试来获得真实的性能结果。比根据您的要求验证结果。您提到了消息数量,但没有提到预期的响应时间。当前在 MSDN forum 上讨论了类似的问题与套接字相比,它提示 WCF 的响应时间慢。

您的帖子中未直接提及其他要求,因此我将做出一些假设以获得最佳性能:

  • 使用 netTcpBinding - 最佳性能,二进制编码,需要 .NET 服务器/客户端。我猜您将使用 Net.Tcp,因为您的另一个选择是直接套接字编程。
  • 如果不需要,请不要使用安全性 - 会降低性能。对于您的 Intranet 之外的客户来说可能是不可能的。
  • 如果可能,在客户端上重复使用代理。如果您重复使用同一个代理,则打开 TCP 连接的成本很高,每个代理只有一个连接。这将影响您的服务实例化 - 默认情况下,单个服务实例将处理来自单个代理的所有请求。
  • 设置服务节流,以便您的服务主机为许多客户端做好准备

您还应该做出一些有关负载平衡的决定。 WCF net.tcp 连接的负载平衡需要粘性 session ( session 亲和性),以便在打开 channel 后客户端始终调用同一服务器上的服务(因为该服务的实例仅在单个服务器上创建)。

关于c# - WCF 或自定义套接字体系结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3534690/

相关文章:

c# - 除了 WinAPI 之外,还有其他模拟用户鼠标输入的方法吗?

c# - gridview的分页

c# - 属性参数必须是常量表达式

c# - 如何查找交易状态

MSMQ 的 WCF 服务监听器 - 挂起的消息

c# - 寻找最佳实践 : Communication between 2 Applications for Filebrowsing and Download

c# - 添加服务引用总是生成 xmlserializer 而不是 DataContractSerializer

java - 服务器未读取数据

编译器对 sendto 调用中的参数 6 发出警告

Java tcp服务器编程不行