多人游戏大厅和配对系统的架构?

时间:2014-03-04 01:17:23

标签: c# http tcp udp unity3d

我希望设计一个玩家可以

的系统
  1. 运行游戏,点击一个按钮进入竞技场,这将把他的IP地址/玩家资料/网络统计数据发送到服务器。

  2. 配对/大厅服务器将保留所有可用玩家的集合。它会不断寻找一对“匹配”的玩家(算法现在不重要)。

  3. 当找到两个排队的“匹配”玩家时,根据玩家资料数据,它会选择一个玩家作为服务器,然后通知游戏客户已找到匹配。根据客户端收到的通知,被选为服务器的客户端将启动服务器,而其他玩家的客户端将在准备就绪时连接到该初始化服务器。

  4. 设置它的好方法是什么?我的第一个想法是通过HTTP POST发送玩家统计数据。但在某些情况下,在服务器找到匹配项之前可能需要几分钟,并响应玩家将拥有什么类型的连接以及他们的对手将是谁。 HTTP适合这个吗?或者这应该是一个较低级别的定制套接字方法?还是我完全离开这里?

    P.S游戏是在Unity中开发的。我更喜欢不仅仅是答案的答案,“这是一个有效插件的链接”,因为我有兴趣了解这通常实现的架构。

    任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:5)

我已经对这些类型的系统做了很多工作。如果我是你,我会有一个http端点设置来处理这样的情况。在游戏中,http post / get是一个糟糕的主意,但在用户界面中它真的不错。您可以每5秒轮询一次,或让服务器告诉客户端何时再次询问。

您还可以使用UDP并来回发送ping以确定客户端是否已连接而不是使用timmy进入TCP井(感觉非常安全,但不要让那个头发欺骗你)。关于这一点的好处是开销比http post /得到的要少,缺点是碎片和顺序(当然如果你有一个合适的状态机,那么顺序并不重要)。

所以,考虑到所有这些,这里是我使用http的建议(同样可以使用udp进行一些调整,但我会使用http,因为那时我不必得到进入碎片化的东西)。

使用托管{insert framework here(WCF,WebAPI,aspx pages,php even)}设置和IIS服务器。

为了让生活更轻松,请创建一个包装类,其中包含您需要的每个可能的api调用。

我认为你想要的电话会是这样的( - >表示服务器,< - 是来自get / post的http响应)。

  • 1 - >你好(球员数据。这是一个初始的竞技场握手)
  • 1 R.1。 < - 欢迎(如果服务器喜欢播放器,这告诉他们他们已被接受)
  • 1 R.2。 < - 错误(此玩家因行为违规而被禁止,没有游戏适合你)
  • 2 - > FindMatch(Matchmaking一旦他们说'你好'就开始寻找它,这是询问服务器是否找到了任何东西。你也可以捆绑诸如预期等待时间等的统计数据等等。充当ping以检查客户端是否还活着。对此的响应将作为ping用户告诉他们他们仍然连接到服务器。您可以实现单独的' ping&# 39;打电话,它真的取决于你)
  • 2 R.1< - NothingYet(我们什么都没发现,冷静等待)
  • 2 R.2< - GotOne(我们找到了匹配。您可以告诉客户端他们是否应该启动服务器或此时连接。)
  • 3 - >离开(挥手告别配对)

希望这会有所帮助。也像我说的那样,你可以用UDP完成同样的事情。虽然(根据经验)我真的不会进入TCP。