Networking P2P网络游戏/应用程序:a";战网“-像匹配服务器

Networking P2P网络游戏/应用程序:a";战网“-像匹配服务器,networking,hosting,udp,p2p,Networking,Hosting,Udp,P2p,我正在制作一个网络游戏(1v1),游戏中的p2p-不需要游戏服务器 然而,为了让玩家能够“找到对方”,而不需要在另一种媒体上进行协调并输入IP地址(类似于现代网络游戏),我需要一个协调/匹配服务器 我无法使用常规web托管,因为: 客户端将使用UDP进行通信 因此,我需要做UDP打孔,以便能够通过NAT 这需要服务器使用UDP进行通信,并了解客户端的IP和端口 如果使用常规的web托管(php/etc),我只能获取客户端的IP地址,并且只能使用TCP(HTTP)进行通信 我目前正在考虑的选择

我正在制作一个网络游戏(1v1),游戏中的p2p-不需要游戏服务器

然而,为了让玩家能够“找到对方”,而不需要在另一种媒体上进行协调并输入IP地址(类似于现代网络游戏),我需要一个协调/匹配服务器

我无法使用常规web托管,因为:

  • 客户端将使用UDP进行通信
  • 因此,我需要做UDP打孔,以便能够通过NAT
  • 这需要服务器使用UDP进行通信,并了解客户端的IP和端口
  • 如果使用常规的web托管(php/etc),我只能获取客户端的IP地址,并且只能使用TCP(HTTP)进行通信
我目前正在考虑的选择:

  • 使用我的程序可以接受UDP连接的托管解决方案。(有什么建议吗?)

  • 似乎这样做了,但使用了GTalk,并要求每个客户机为此拥有一个GTalk帐户(这可能使它成为一个不合适的解决方案)


有什么想法吗?谢谢:)

除了让专用服务器运行您的代码之外,我没有其他选择。我们可以说,你提出的其他解决方案不是最理想的


如果你从小做起,虚拟主机就可以了。成本非常低。

您只需获得一个廉价的共享托管服务,并将应用程序接口与PHP页面连接,而PHP页面又与MySQL数据库后端连接,而不是一个成熟的专用服务器

例如,它有一个3美元/月的入门包,包括5gb的空间和50gb的带宽。对于这么简单的事情,这就是你所需要的

然后,您只需让您的应用程序在网页上轮询游戏列表,然后提交POST请求,以便将自己的游戏添加到列表中

当然,如果您还不了解PHP和MySQL,那么这种方法需要学习它们。如果你做得好,你可以让PHP页面进入一种无限循环,保持连接打开,只向客户端提供更新,而不是每隔几秒钟轮询一次页面,浪费大量带宽。但这远远超出了这个答案的范围

哦,如果你在寻找完全免费的东西,那就搜索一个免费的PHP主机。那些也存在!即使有支持广告的主机,你的应用程序也可以在解析游戏列表时抓取页面并忽略广告。我知道这曾经是我的最爱之一,因为他们的免费计划不跟踪空间或带宽(它限制了每个文件的大小,以消除他们的服务被用作媒体共享,但这对PHP文件来说应该不是问题)。但当然,我认为从长远来看,你最好和一个有报酬的主持人在一起


编辑:T35还说“免费托管允许托管一个域名,而付费托管则提供无限域名托管。”所以你甚至可以只需支付域名的费用并将其链接到它们!我认为在短期内,这是你最好(最便宜)的赌注。当然,这都是假设您知道或愿意学习PHP以实现这一目标

gnutella模型是托管自己的专用服务器和严格的P2P网络环境之间的中间解决方案。在该模型中,超级对等机的行为类似于本地服务器,具有已知的IP地址,并且比典型对等机连接到(从而了解)更多的客户机。这仍然要求您自己至少运行一台superpeer,但它让您可以选择让其他人运行自己的superpeer。

首先,让我说,这完全超出了我的专业领域,但我发现自己非常感兴趣,所以我一直在做一些搜索和阅读

看起来,UDP NAT遍历最常见的解决方案是使用服务器。我做了一些快速搜索,看看是否有任何公司会直接向你提供一个STUN托管解决方案,但如果有的话,他们被简单的网络托管广告淹没了

幸运的是,似乎有几个STUN服务器已经启动并运行,免费供公众使用。在上有一个公共STUN服务器列表


此外,如果您进行探索,还可以获得更多信息。

没有任何东西是每个网络连接都支持的。STUN可能很好,UPnP可以解决这个问题

然而,有传言称,大多数防火墙都可以通过UDP端口53(DNS)通过几乎任何东西。不过,您可能不得不就访问该端口的问题与操作系统争论

还有,看看,这是为这类事情设计的另一个协议。随着VOIP的普及,在更多的防火墙中可能会有相当好的内置支持


如果你真的致力于UDP,你也可以考虑将它移植到HTTP上。

< P>你把问题分成两个部分——制作一个游戏匹配器客户端(与游戏不同),它可以通过HTTP与你的廉价/共享的网络主机通信。所有想使用游戏匹配功能的玩家都可以使用此功能。然后,game matcher客户端在从服务器获取信息后,使用正确的参数(IP等)启动实际游戏

游戏将使用标准的方式来UDP打孔通过NAT等,根据您的网络代码。这款游戏实际上不需要知道任何关于matcher客户端或matcher服务器的信息——真正意义上的p2p(比如torrents,一旦你获得了你的对等IP,你甚至可以断开与跟踪器的连接)


这样,您的问题就会变得更小。

还有其他选择,但所有这些都是超出其价值的工作。说到网络代码,最好保持简单。@Ricket:谢谢你的建议。我现在发现php托管对我来说不起作用,因为它不允许我在UDPRight中与客户机通信。我只是回去重新思考了NA的概念