WCF Net.TCP:向许多客户端广播消息的最有效方式

时间:2015-01-16 12:24:58

标签: c# .net wcf networking tcp

我有一个 WCF 服务托管 Net.TCP 绑定,很多客户(> 100)可以连接和接收各种广播信息。相同的消息被发送到所有客户端,我当前正在做的当前方式是有专用线程在BlockingCollection上等待新消息,并且一旦新消息到达它就迭代客户端回调连接列表并调用接收消息作为参数的方法。

所以我的代码目前看起来像这样:

var msg = ... get message from queue ...
foreach(var client in clients)
    client.SendMessage(message)

此设计存在以下问题:

  1. 在我向所有客户发送消息之前,客户端无法接收新消息
  2. 我想检测慢客户端并可能断开它们
  3. 消息被序列化的次数与我有客户端一样多(我可以更改它以便在发送之前对消息进行序列化,但我需要将SendMessage的签名更改为SendMessage(byte []内容),这是不是我想做的事情)
  4. 有没有人遇到过这类问题?任何提示/技巧/提示?

1 个答案:

答案 0 :(得分:1)

似乎你必须使用多播而不是专用通信。因此,每个新客户端都需要加入演员频道(详见IGMP),然后您的服务器将根据您需要发布的消息发送一次。