我有一个场景,我需要跨两个客户端发送一系列数据。
该数据包括序列化的XML,该XML将包含另一个客户端需要对其做出反应的命令。
我还需要发送图像通过电线,因为我需要提供一个聊天设施在视频/音频聊天的形式。
我希望两者都有一个单一的通信媒介,因为消息/命令的数量可能会很少。
WCF还是Sockets?
发布于 2011-01-09 05:48:39
WCF是用于构建面向服务的应用程序的API。我不认为视频/语音聊天是这样的应用程序。
首先,对于这样的应用,您需要哪些传输功能?我的语音/视频传输知识非常差,但我希望:
客户端连接到聊天服务器,发送他的语音/视频数据,并接收其他client.
因此,通过简单地描述这三个期望,我已经看到了问题所在。WCF内置Net.Tcp binding does not allow duplex communication and streaming together。还要注意的是,在WCF上的Net.tcp通信的性能比普通的套接字通信差得多。这是因为WCF简化了很多事情,但这些简化和概括减慢了处理速度。
此外,根据选定的算法,this可能是一个问题。
你可以在Silverlight4中找到一些视频聊天的描述。Silverlight允许Here和net.tcp绑定,但通信仍然是在套接字上开发的。
Here您可以找到广泛使用的IP语音协议的描述-用于数据传输的RTP和用于协调和QoS的RTCP。这些协议也用于视频传输。通过谷歌搜索,我找到了适用于.NET的implementation (我不知道它的实现有多好,我只是使用了谷歌...)
发布于 2011-01-09 06:03:45
以下是我会考虑的一些事情:
如果您预期有几种不同类型的客户端连接到您的服务器,则WCF可能会很有用。也许将来你会想让其他人写客户端,或多或少独立于你。另一方面,如果它是一个封闭的系统,那么您可能更喜欢编写自己的套接字代码。
WCF为您提供了更高级别的抽象,因此您可以更快地编写系统。特别是,像XML编码和会话管理这样的东西并不是您的应用程序域的一部分,因此您不想在它们上面花费太多的时间。但更高的抽象通常涉及性能成本,因为抽象层比任何一个应用程序需要的更通用。使用普通套接字,您可以根据自己的需要定制您的系统,这可能允许更高的性能(代价是更繁琐的开发和错误修复)。
您可能希望在不同的流中发送数据/命令和视频。假设数据/命令必须通过可靠的传输来发送,但是视频可能会遭受一些损失。或者,视频应该以高QOS发送,而数据/命令可能遭受延迟。我实际上从来没有使用过QOS,所以我不知道这里有什么问题,但它可能会影响你关于WCF的决定(无论是积极的还是消极的)。
您可以在服务器自己的进程中或在IIS中承载服务器。如果你自己托管它,那么你可以用你自己的方式做事情。我相信WCF和IIS是好朋友,所以如果你在想IIS,那么WCF可能会让生活变得更容易。如果您选择IIS (或任何已建立的web服务器)而不是您自己的主机,则可以利用其基础架构-可伸缩性、可靠性、加密等。缺点是您可能会被锁定在该服务器中,但在实践中这可能不是问题。
根据您的环境,您可能能够混合和匹配各种技术和功能。例如,我们有一个听起来与您的系统有点相似的系统,我们选择了:客户端中的普通套接字;服务器中的普通套接字,但可以选择将服务器托管在Apache中;执行我们所需的自定义XML库;嵌入OpenSSL;COM在系统的核心,但依赖于.NET。特别是,我们在第一个原型中使用SOAP,因为它的消息传递和RPC与我们的设计完美匹配,但发现它增加了太多的复杂性,并用我们自己的协议替换。
如果您有时间,那么我建议您在WCF中构建一个快速原型,看看您的想法。最主要的原则是尽可能高效地为客户提供最大的业务价值,这通常意味着您应该将精力花在应用程序领域而不是基础设施上。但同时不要忽视诸如性能、可靠性、可伸缩性、可维护性、可扩展性等次要原则。
发布于 2011-01-09 04:33:53
WCF 或套接字?这些都不是可选的: WCF包括用于TCP/IP通信的NetTcpBinding和NetPeerTcpBinding。
如果您的客户端都是Windows,则应使用WCF。
https://stackoverflow.com/questions/4635959
复制相似问题