你首先需要问自己几个问题:
- 我的“客户端”是网络浏览器还是可执行文件?
- 有多少客户端将连接到我的服务器?
- 多久向客户端发送一次数据?
- 客户端立即接收数据(而不是一两秒延迟)有多重要?
如果您的客户端是 Web 浏览器,那么您的选择会更加有限,请查看Comet以获得一些指导。正如其他人提到的,这里有一篇很好的博客文章,解释了如何使用 ASP.NET 来做 Comet。
如果您不希望有很多客户端,那么打开从客户端到服务器的连接可能是一个可行的解决方案,请查看这些 MSDN 页面以获取信息和一个基本示例: - TcpListener
- TcpClient
如果您期望有很多客户端(超过 50 个,具体取决于您的服务器硬件),那么您的选择取决于其他问题的答案:
如果您的客户端频繁获取数据并且可以接受短(秒)延迟,那么轮询是一个简单的解决方案,您可以对客户端隐藏实现,以便看起来数据正在被推送,但实际上客户端中有一个线程每隔几秒轮询一次。
如果您的客户不经常获取数据,那么像Comet这样的东西可能是一个不错的选择,如果您正在寻找 .NET 解决方案,请搜索“Long Polling WCF”。
更新:
既然你现在说你的客户是 Silverlight,我强烈推荐这些博客文章,谈论你所追求的东西:
WCF 双工服务更好,因为它使用设置消息和响应,因此无需自己解析文本或二进制数据。它基本上是 Silverlight 的 Comet 版本。