基于回合制的多人游戏:WCF还是Socket?

时间:2011-08-17 09:18:31

标签: .net wcf sockets architecture

我想就我的问题提出建议。

我们正在创建一个具有以下功能的多人互联网国际象棋游戏:

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

    现在我的问题是?

    1. 我们应该使用哪种技术,套接字或WCF?
    2. 序列化,XML或二进制或自定义的首选方式是什么 二进制?
    3. 欢迎任何其他建议/建议/指示。

      由于

2 个答案:

答案 0 :(得分:8)

这是我的意见。

<强>套接字

  • (+++)比WCF更快(特别是如果你使用UDP)
  • (+)将来你会在硬件上花费更少,因为带有套接字的app会有更好的可扩展性
  • ( - )您将花更多时间进行开发
  • ( - )您将在开发上花更多钱
  • ( - )您需要设计自己的协议或使用足够近的合适协议
  • ( - )难以退出API
  • ( - )对第三方开发者来说很难

<强> WCF

  • (+)避免传输级别的任何问题
  • (+)易于扩展API
  • (+)它可以节省您的开发时间
  • (+)易于提供第三方API
  • (+)您将花更少的钱进行开发
  • ( - )它比套接字慢
  • ( - )您将在硬件上花更多钱,因为使用WCF的应用程序将具有更差的可扩展性

无论你要使用什么类型的序列化,WCF都会比套接字慢。

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

也许是使用这两种技术的最佳方式。性能至关重要的套接字(例如,将游戏服务器彼此连接),WCF用于其他部分(例如发送和接收聊天消息)。

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

答案 1 :(得分:3)

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