我想使用 WCF 开发一个 TCP 服务器应用程序,它必须是高度可扩展和高性能的服务器,可以处理至少 200 个并发连接:通过 GPRS 从我的客户端获取原始数据。
我的数据包括:
public class RawData
{
public string deviceID { get; set; }
public string timeStamp { get; set; }
public string messageType { get; set; }
public string driverId { get; set; }
public string senosrs { get; set; }
public string startStatus { get; set; }
public string x { get; set; }
public string y { get; set; }
public string course { get; set; }
public string speed { get; set; }
public string satCount { get; set; }
public string signal { get; set; }
public string message { get; set; }
}
我的问题是:
我可以使用的最佳绑定(bind)是什么?
我想通过与我们的服务器建立的连接来回调我的客户端。如何检查 wcf 数据包大小?
我用过这个教程: http://zamd.net/2008/08/15/calculating-wcf-message-size/ 我的包裹有 500 长!是字节还是其他一些单位?WCF 是否足以满足我们的情况?我们使用 gprs 作为数据网络。
这种情况下是否需要实现路由服务?
这个问题最好的编码是什么?最佳压缩*速度。
最佳答案
回答您的问题:
netTcpBinding - 它是最高性能的绑定(bind),因为它基本上是原始套接字。它还支持 duplex .
如果您一次性需要它而不是用于生产监控,请尝试配置 wcf tracing .这绝对可以记录使用该 channel 的每条消息。
有点。 200 个并发传入连接(如果您的服务是 stateless )是 fairly easy (虽然可能需要一个小的 scale out ),但是 duplex wcf 充其量是复杂的,重要的是 does not scale well - 您要么需要所有客户端的单个服务实例,要么需要一些持久的后备存储来同步客户端回调委托(delegate)(尽管这可以通过 caching 有效地实现)。
除非您需要根据消息内容动态更改端点、在网络协议(protocol)之间进行转换等,否则我看不到用户需要 wcf-routing在这种情况下,除了作为一种负载平衡器。如果你确实需要横向扩展,你可能最好使用实际的网络负载均衡器。
netTcpBinding 默认使用二进制编码,只要 channel 的两端都是 WCF。这是最optimized在 WCF 中绑定(bind)。
关于c# - 如何为数百个并发连接优化/设计 WCF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093542/