WCF VS.套接字

时间:2011-03-06 07:57:46

标签: c# .net wcf sockets

我想知道哪个WCF或.NET套接字效率更高,而且在游戏开发方案中推荐的更多。

以下是游戏的不同部分:

- 在互联网上播放的客户端/服务器通信

- 在本地网络上对等。

我想知道你将在这些部件上使用哪种技术(两者都是wcf,两者都是套接字,另一端是wcf,另一端是套接字......)以及为什么,如果可能的话。

所涉及的游戏不需要很高的通信频率(每秒3-4个就足够了)。

4 个答案:

答案 0 :(得分:11)

如果要最大限度地提高性能套接字是可行的方法,WCF既有数据又有处理开销。但是......如果性能对您至关重要,您还应该考虑汇编而不是c#。

WCF每秒可处理3-4个请求而不会闪烁。

我将从WCF开始,它将为您节省大量的开发时间,无需自行解析等等。您可以专注于游戏中的其他部分。如果它实际上让我们的WCF对你的游戏来说太慢了,你就可以把WCF扔出去而去寻找套接字。

答案 1 :(得分:6)

WCF的目的是保存为不同传输协议编写代码的开发人员,并且它具有大量功能,因此它比Sockets慢。加上WCF用于面向服务的应用程序。我认为游戏不属于这一类。

但是你提到每秒只有3-4个请求,WCF可能是一个更好的选择,因为它非常灵活,可以节省大量的开发时间。

有些观点:

以net *开头的绑定意味着在.NET应用程序之间使用。 (客户端和服务器WCF)
如果任何一个不是WCF:您只能使用不以网络前缀开头的绑定。 BasicHttpBinding,WSHttpBinding等。这些比net *绑定慢得多,因为有很多开销。

您可以继续使用 NetPeerTcpBinding 并使用它一段时间。它还支持双工通信。

以下是P2P的一些有用链接:

Peer-to-Peer Programming with WCF and .NET Framework 3.5
http://blogs.interknowlogy.com/2009/08/05/building-a-really-simple-wcf-p2p-application

答案 2 :(得分:3)

这两种技术都可以管理您提到的每秒请求数,但编程模型却大不相同。套接字是非常低级的,需要您在其上构建自己的通信协议。但是,开销可能很小。 WCF以RPC(远程过程调用)为模型,并提供传输的抽象。它允许您使用与Web服务或消息传递等不同技术相同的API。然而,所提供的抽象有其自身的一系列问题,例如某种复杂性或陡峭的学习曲线......

在您的情况下,您还可以查看消息传递技术,例如MSMQZeroMQActiveMQ,这些技术可以提供对套接字的良好抽象,并简化开发过程。

答案 3 :(得分:1)

如果你不需要实时性能(你正在使用C#所以我猜就是这种情况)那么我建议使用WCF。

WCF将为您提供更简单的OOP样式工具来编写您的服务器 - 客户端协议 WCF的优势在于,从长远来看,您最终在其中编写的协议和代码更易于维护和遵循。

如果您想添加任何内容,可以更轻松地为协议添加和更改功能。

WCF是高度可定制的,因此您最好阅读它提供的不同数据发送方法,以及重载它们的方法。

您可以使用不同的绑定类型来优化数据传输:

WCF Binding In Depth