Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 回合制多人游戏:WCF还是Socket?_.net_Wcf_Sockets_Architecture - Fatal编程技术网

.net 回合制多人游戏:WCF还是Socket?

.net 回合制多人游戏:WCF还是Socket?,.net,wcf,sockets,architecture,.net,Wcf,Sockets,Architecture,我想就我的问题提出建议 我们正在创建一款多人网络象棋游戏,具有以下功能: 游戏将支持大量并发用户 我们将在磁盘上物理保存每个游戏移动(例如,使用SQL Server数据库) 我们也将在会话中使用相同的SQL Server 多个游戏服务器将用于负载平衡/可扩展性 所有游戏服务器将相互连接 所有游戏服务器也将连接到该SQL服务器 因为这是一个国际象棋游戏,所以只有2个用户可以玩这个游戏,但是 无限数量的用户可以作为观众实时观看此游戏(广播) 观众/游戏用户可以选择私下或公开发送和接收聊天信息 我们将

我想就我的问题提出建议

我们正在创建一款多人网络象棋游戏,具有以下功能:

  • 游戏将支持大量并发用户
  • 我们将在磁盘上物理保存每个游戏移动(例如,使用SQL Server数据库)
  • 我们也将在会话中使用相同的SQL Server
  • 多个游戏服务器将用于负载平衡/可扩展性
  • 所有游戏服务器将相互连接
  • 所有游戏服务器也将连接到该SQL服务器
  • 因为这是一个国际象棋游戏,所以只有2个用户可以玩这个游戏,但是
  • 无限数量的用户可以作为观众实时观看此游戏(广播)
  • 观众/游戏用户可以选择私下或公开发送和接收聊天信息
  • 我们将在数据库中维护我们自己的用户列表。因此,我们将需要一个自定义的身份验证系统
  • 客户端将是桌面windows窗体/wpf应用程序。我们也在考虑基于在线浏览器的版本,但我们已经把它放在了未来,目前我们正专注于桌面版本

    现在我的问题是

  • 我们应该使用哪种技术,套接字还是WCF
  • 序列化的首选方式是XML、二进制还是自定义 二进制
  • 欢迎提供任何其他建议/建议/指导

    谢谢

    这里是我的意见

    插座

    • (+++)比WCF快(特别是在使用UDP时)
    • (+)由于带有套接字的应用程序将具有更好的可扩展性,因此未来您将在硬件上花费更少
    • (-)您将在开发上花费更多时间
    • (-)你将在发展上花更多的钱
    • (-)您需要设计自己的协议或使用足够接近的合适协议
    • (-)难以扩展API
    • (-)这对第三方开发者来说是困难的
    WCF

    • (+)避免与传输级别有关的任何问题
    • (+)易于扩展的API
    • (+)它将为您节省开发时间
    • (+)易于提供第三方API
    • (+)你将在发展上花更少的钱
    • (-)它比插座慢
    • (-)您将在硬件上花费更多的钱,因为带有WCF的应用程序的可扩展性会更差
    无论您要使用哪种序列化,WCF都会比套接字慢

    无论如何,您不会使用“HipHop for PHP”。我认为,答案是,使用WCF创建简化的客户端和服务器应用程序。使用不同的绑定、序列化等最大限度地加载它(如您所想)。如果WCF能够处理加载并具有良好的保留,那么我假设您可以使用它。如果不是,请使用套接字

    也许使用这两种技术的最佳方式。性能至关重要的插座(例如,将游戏服务器相互连接),其他部件的WCF(例如,发送和接收聊天信息)


    我相信这两种技术还有很多其他的理由。但我认为问题是:你想让它更快还是更容易维护。它是一个经常添加功能的应用程序,还是一个负载将以几何级数增长的应用程序。等等等等

    除了丹尼尔的回答之外:
    抽象您的通信代码并从WCF开始。如果它最终会变慢(我认为不会),您仍然可以相对轻松地切换到套接字。

    如果它有很好的文档和示例代码,没有什么是困难的。是的,当然。但是,如果我可以让开发人员添加一个服务引用,为什么我必须让开发人员使用自定义套接字协议呢?谢谢Danil,谢谢你抽出时间。实际上,我们对WCF唯一感到困惑的是可伸缩性。WCF能否在多个连接的服务器上工作?这是主要问题。至少我们将有4到5台物理机器用于游戏服务器。我们希望系统足够灵活,以便随着负载的增加,我们可以轻松地添加更多的节点。和您的问题相关的套接字并没有区别。“WCF能在多个连接的服务器上工作吗?”这个问题没有意义,但答案是肯定的。无论如何,在这两种情况下,可伸缩性和所有其他应用程序属性不仅取决于技术,还取决于它的设计方式。因此,我相信,最好的方法是在正确的地方使用正确的技术。设计你的项目。决定应该在哪里使用套接字,以及可以在哪里使用WCF。通过一些测试和检查来证明您的概念。好吧,WCF是一个基于http的协议,因此它比通过原始套接字发送的二进制有效负载要慢一些(例如,有一些替代方案增加的开销更少,使用起来也很方便),如果您希望web服务连接到多个服务器,那么您必须引入负载平衡器。您还(我发现)希望在通信通道的两端使用WCF,因为WCF web套接字与Java和PHP web服务有点不兼容!重要的是,如果您使用WCF,您可以使用套接字连接,只需更改绑定即可。