实时沟通

时间:2012-08-29 02:33:58

标签: c# .net visual-c++

我遇到与发布此主题的人相同的困境,Real-time communication with WCF 除了我的问题不是关于游戏编程。我想知道什么是能够在两个Windows应用程序(服务器 - 客户端)之间进行实时通信的最佳方法。我使用visual c ++ / c#来约会,我希望能够实时显示我的服务器收到的所有Feeds到客户端。

我已经开始尝试使用.NET远程处理,但在我的持续研究中,似乎它将使用SOAP-http,并可能影响通信的速度。我的服务器和客户端将使用互联网进行通信,并且.NET远程处理不允许在防火墙或互联网之间进行通信时使用TCP通道。

非常感谢您的投入。

2 个答案:

答案 0 :(得分:2)

我想这取决于你的情景,如果你想要“实时”并且你愿意在这个过程中丢失一些你最好使用UDP的软件包,比如使用视频会议工具,当你恢复你的时候你必须移动慢速包并在视频或音频中显示下一帧;这是使用UDP的一个很好的例子。这就是UDP比TCP快得多的原因。

但是,如果您不愿意丢失一条消息,那么TCP就是为您制作的,因为如果您丢失了一个包,协议将再次请求它以使您的完整消息尽可能完整。

此外,它取决于通信的持续方式,信息是从一个到多个?,从多个到多个?,一个到音调?

以NetNamedPipeBinding为例,这将是一个更快的过程,但只是部署在一台机器上,而是跨进程。而NetMsmqBinding将帮助您构建队列,而且对于负载将是大量连接的场景,它将具有惊人的可靠性和可扩展性。

最后,这一切都归结为您的具体情景和业务目标。

希望有所帮助

答案 1 :(得分:0)

如果您愿意进行自己的消息解析,可以使用带有TcpClient和TcpListener类的标准TCP套接字。如果您的数据已经是可序列化的对象,您可以将其序列化为文本流,然后通过套接字发送它,在客户端进行反序列化。

要让它在互联网上工作,服务器需要在您的路由器上转发端口,客户端只需连接到服务器的公共IP。显然,您需要在防火墙中为此端口添加例外。

WCF和大数据的最大问题是设置流媒体,默认情况下,WCF会立即发送所有内容,这对于大文件来说是不切实际的。