WCF与Sockets的区别

10
我想知道在游戏开发场景中,WCF和.NET Sockets哪一个更高效、更受推荐。
以下是游戏的不同部分:
- 客户端/服务器通信以在互联网上进行游戏 - 本地网络上的点对点。
我想了解您会在这些部分使用哪种技术(两者都用WCF或Sockets,一个用WCF,另一个用Sockets...),如果可能的话,请说明原因。
此游戏所涉及的通信频率不需要很高(每秒3-4次足够)。

你打算如何在本地网络上进行客户端/客户端互操作?这毫无意义。 - Chev
2
他的意思是点对点;这是有道理的。 - madd0
不,点对点是有意义的。不是客户端对客户端。 - Chev
是的,我指的是点对点。如果您希望,我可以进行编辑... - kite
没关系,我只是没明白。 - Chev
类似的问题:https://stackoverflow.com/questions/59456579/is-wcf-built-on-sockets - Sisir
4个回答

11

如果你想要最大化性能,那么使用 sockets 是一个好的选择,WCF 有数据和处理开销。但是...如果性能对你来说非常关键,你还应该考虑使用汇编而不是 c#。

使用 WCF,每秒可以处理 3-4 个请求而不会出现问题。

我建议先使用 WCF,这将节省很多开发时间,无需自己编写解析器等等。你可以在游戏的其他部分上集中精力。如果事实证明 WCF 对你的游戏太慢了,你可以放弃 WCF 而改用 sockets。


7
WCF的目的是为了减少开发者编写不同传输协议的代码,它具有大量特性,因此比Sockets慢。此外,WCF适用于面向服务的应用程序。我认为游戏不属于这个范畴。
但是,正如您所提到的每秒只有3-4个请求,WCF可能是更好的选择,因为它非常灵活,并且可以节省大量开发时间。
以下是一些要点:
以net *开头的绑定是用于.NET应用程序之间的。(客户端和服务器WCF)
如果其中一个不是WCF:您只能使用不以net前缀开头的绑定。BasicHttpBinding、WSHttpBinding等。它们比net *绑定慢得多,因为有很多开销。 您可以继续使用NetPeerTcpBinding并进行一段时间的测试。它还支持双工通信。
这里是一些P2P的有用链接: 使用WCF和.NET Framework 3.5进行对等编程
http://blogs.interknowlogy.com/2009/08/05/building-a-really-simple-wcf-p2p-application

3
两种技术都可以管理你提到的每秒请求数量,然而编程模型却有很大不同。Socket 是非常底层的,需要你在其上构建自己的通信协议。然而,开销可以最小化。WCF 建模于 RPC(远程过程调用),并在传输层提供了抽象。它允许你使用相同的 API 与非常不同的技术,如 Web 服务或消息传递。然而,所提供的抽象也有其自身的问题,例如一定的复杂性或陡峭的学习曲线...
在你的情况下,你还可以考虑诸如 MSMQZeroMQActiveMQ 等消息传递技术,它们对 Socket 提供了良好的抽象,并大大简化了开发。

1

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

WCF将为您提供更容易的面向对象编程风格工具来编写您的服务器-客户端协议。
WCF的优点在于,从长远来看,您最终在其中编写的协议和代码要容易维护和遵循得多。

如果您想添加任何功能,它将更容易添加和更改协议。

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

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

WCF Binding In Depth


1
C#可以用于编写实时应用程序(虽然这也取决于你所说的实时是什么意思)。 - dodgy_coder
@yochai TImmer 我想要一个WMS和WCS之间的通信,希望它是实时的,像250毫秒这样快。哪种方式更好,WCF还是Socket? - Dutt93
@Dutt93 我会选择WCF。如果正确配置,延迟低于1毫秒(在本地机器上测试,其余是网络开销。无论使用哪种实现,网络开销都存在)。 - Yochai Timmer
@YochaiTimmer 谢谢您的快速回复。是的,这很有道理。您能否告诉我一些WCF相对于Socket的真正好处,因为无论我在哪里找到的人都说Socket比WCF更好。 - Dutt93
@Dutt93 扩展性和可维护性。如果您计划进行一个大型项目,其中可能有多个层和配置,则可能会使用WCF。您不需要为要发送到网络的每一位重新发明轮子。WCF为您提供了一个很好的抽象层。套接字可以说比WCF更有效率。但只有在编写正确的情况下,然后您需要数年的调试来重新发明您的通信层。此外,如果效率是您追求的目标,那么纯汇编语言和C语言将比C#更有效率。 - Yochai Timmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接