如何建立一个简单的双人游戏,通过互联网进行通信,在任何服务器上都没有自定义代码?

时间:2010-01-27 02:56:55

标签: instant-messaging p2p

如何构建一个简单的双人游戏,通过互联网进行通信?

我需要解决以下问题:

  • 查找或约会 - 两名玩家想要找到对方。

  • 正在进行的沟通。任何一个玩家都可以在合理的快速时间范围内(IM类型延迟,而不是电子邮件类型的延迟)发起需要向另一方传递信息的操作。

在这方面,我认为它相当于双向聊天,人们希望能够找到对方,然后,一旦配对,就可以进行相互通信。

进一步要求:

  1. 目前,假设端点是Windows操作系统,相对较新。

  2. 假设两个端点机器都不能直接从Internet访问。假设它们是客户机,隐藏在阻止传入请求的防火墙后面。机器可以发出出站请求。 (比如,通过HTTP,但TCP也没问题)

  3. 沟通应该是私密的。为简单起见,假设已存在共享密钥,端点可以执行AES。我想我的意思是,任何中介都不需要解密消息包。解密将仅在端点处发生。

  4. 所有自定义代码只能在客户端PC上运行。

  5. 假设互联网上没有服务器在我的控制之下。

  6. 我很高兴使用第三方服务器来促进互通,例如IM服务器或其他东西,只要它是免费的,我不需要在其上安装自定义代码。


  7. 有哪些API可用于促进此设计?

    我可以使用IM API执行此操作吗? WCF?是否有Windows Messenger的WCF频道?

    什么协议? HTTP?我把它标记为“点对点”,但我的意思是虚拟;对于正式的p2p协议没有硬性要求。

    您会使用哪种邮件格式?


    编辑

    为了澄清服务器周围的要求,我想要的是我控制下的无服务器。并且我的任何服务器上的定制代码都没有。这与“无服务器”不同。

    以这种方式思考:我可以通过SMTP发送电子邮件,使用我在发送和接收方面编写的自定义代码。我的自定义代码可以通过免费的SMTP服务器中介连接。这将不需要在SMTP服务器上安装代码。这就像我想要的那样,但由于延迟,SMTP是不可接受的。

    EDIT2
    我也发现了这个:library for Instant Messaging, like libpurple, but written in C#


    ANSWER

    我可以做我想要的,使用IM框架的库。使用Windows Live Messenger进行此操作的一种简单方法是使用Messenger Activity SDK。这证明了这个概念,但实际上并不是一般的解决方案。但是,对于各种信使系统的IM库,例如libpurple,或者使用用于IRC频道的库,可以实现类似的事情。在所有这些情况下,IM服务器充当防火墙穿透通信基础设施。

7 个答案:

答案 0 :(得分:3)

每个双人游戏必须具有某种类型的服务器环境,至少需要在两个客户/玩家之间进行通信。请记住,每个客户/玩家也可以充当自己的服务器与其他链接的客户端进行通信。但是,需要在任何给定时间密切关注所有客户/玩家以及促进搜索其他客户端/玩家的需要本身需要某种类型的服务器环境。

答案 1 :(得分:3)

IM是错误的工具。相反,请使用IRC聊天室。

通过IRC聊天室,您的客户“登录”到聊天室,并用于您的“在线状态”。聊天室里的任何人都“可以”玩游戏。

一旦完成,游戏实例将通过聊天室相互通信。他们可以使用全球频道,或仅使用私人IRC频道进行游戏流量。

要解决的问题:

  • 首先,在客户端共享所有游戏状态。许多游戏都做到了这一点(RTS就像帝国时代,像暗黑破坏神一样的RPG)。但客户状态容易受到黑客攻击和欺骗。这只是一个明显的事实。如果游戏很受欢迎,它将被黑客攻击。

  • Ping流量。基本上流程是您登录到房间,您的客户端处于“可用于播放”模式。然后它每个人都会打,看看他们是否可以玩。每个客户“登录”聊天室都会发生这种情况。然后你可以使用公共场所进行广播活动“弗兰克准备好迎接新游戏”,“弗兰克开始与乔一起玩游戏”,等等。这可以帮助保持游戏同步而不是聊天,但是当客户端连接到聊天时房间,它会去“大家好,这是鲍勃,你们都在做什么”。所以你需要管理它。

  • 交通量。 IRC房间可以处理大量的流量,但不是很多流量。大多数都是为了防止“垃圾邮件”,“泛滥”等。所以你可能会对游戏玩法的速度有限。对于“跳棋”来说不是问题,对于40人Raid期间的“魔兽世界”更是如此。这是一个游戏设计问题。

  • 服务条款。 IRC提供商可能会说“呃不,你不能用我们的服务做到这一点”。我没有看过它,所以我不知道,但可能是一个问题。

除此之外,IRC非常适合。很多IRC机器人代码在网上浮动,我从来没有使用它。

答案 2 :(得分:1)

libpurple以及otr可以为您提供此类应用程序所需的IM隐私权。

答案 3 :(得分:0)

你有很多相互矛盾的要求。防火墙后面的两个客户端阻止传入请求几乎意味着它们不能执行peer-2-peer,因为这两台机器都不能充当服务器,并且你需要在中间的某个地方有一个传输服务器将消息路由到每个客户端。现在,鉴于没有服务器要求,你所要求的几乎是不可能的。

答案 4 :(得分:0)

您可以在其中一个免费留言板服务器上设置留言板,以便玩家可以找到对方。您可能希望鼓励他们使用私人消息来交换IP地址。然后,使用使用IP地址连接的协议。祝你好运。防火墙让它变得痛苦。

然后,当然,这对中的一台机器需要充当服务器,另一台机器需要充当客户端。您的软件必须包含两组代码。我写过这样的游戏,可以告诉你通信代码有点令人困惑。

我现在可以告诉你,如果你写了一个网络服务来促进沟通,你会更幸福。但是,那么,你需要一台服务器。

祝你好运。你需要它。

或者,您可以为IM客户端编写游戏,例如Microsoft Messenger。我已经看过那个游戏了,所以我知道可以做到。

答案 5 :(得分:0)

正如有人所说,如果你在2名玩家之间没有任何中介服务器,那么可能还不可能这样做。由于您很乐意使用第三方服务器,我建议您使用Google App Engine + XMPP通过HTTP构建系统。它在互联网和防火墙后很好地工作。然而它是免费的(只要你的系统没有超出GAE配额)。

答案 6 :(得分:0)

由于您的防火墙限制,Peer to peer已经退出。无论如何,这对目录服务来说并不是很容易。

我将使用的下一个最简单的方法是在众多超便宜的虚拟主机网站之一上抛出一个非常简单的CGI服务器脚本。看来你不想走这条路。有什么特别的原因吗? 100行代码和超级廉价的服务器应该为您提供所需的一切以及更多。

我想你可以加入某种第三方聊天库的东西。我不知道当前的IM协议,但是好的旧IRC和你的游戏的单独频道都可以工作。你甚至可以用FTP拼凑一些东西。 BLOG对免费博客网站的评论也会奏效。问题是为什么?

这些都是kludges。他们以钝的,不优雅的,缩放的方式完成工作。

我建议您重新考虑Web服务器解决方案。