代码之家  ›  专栏  ›  技术社区  ›  Cheeso

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

  •  4
  • Cheeso  · 技术社区  · 15 年前

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

    我需要解决以下问题:

    • 查找或集合-两个玩家想要找到彼此。

    • 持续沟通。任何一个玩家都可以在一个合理快速的时间框架内(即时消息类型延迟,而不是电子邮件类型延迟)启动一个需要向另一方传递信息的操作。

    在这方面,我认为这相当于双向聊天,人们希望能够找到彼此,然后,一旦配对,相互交流。

    其他要求:

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

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

    3. 通信应该是私有的。为了简单起见,假设已经有了一个共享的秘密,并且端点能够执行AES。我想我的意思是,任何中介都不需要解密消息包。解密将只在端点处进行。

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

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

    6. 我很乐意使用第三方服务器来促进内部通信,比如IM服务器之类的,只要它是免费的,并且我不需要在上面安装自定义代码。


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

    我可以用IM API来做这个吗?WCF?有Windows Messenger的WCF频道吗?

    什么协议?HTTP?我把这个标记为“点对点”,但我的意思是 实际上 对于正式的P2P协议没有严格的要求。

    您将使用什么消息格式?


    编辑

    为了澄清服务器的需求,我想要的是不受我控制的服务器。在任何服务器上都没有我的自定义代码。这与“无服务器”不同。

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

    编辑2
    我还发现了: library for Instant Messaging, like libpurple, but written in C#


    回答

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

    7 回复  |  直到 14 年前
        1
  •  1
  •   Ignacio Vazquez-Abrams    15 年前

    libpurple 随着 otr 可以给你的隐私权在我这样的应用程序将需要。

        2
  •  3
  •   Will Hartung    15 年前

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

    有了IRC聊天室,您的客户就可以“登录”到聊天室,这将用于您的“状态”。聊天室里的任何人都可以玩这个游戏。

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

    要解决的问题:

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

    • 平交通。基本上,流程是您登录到房间,您的客户机处于“可播放”模式。然后,它会对其他人发出叮当声,看他们是否可以玩。这将发生在每个客户“登录”聊天室时。然后,您可以使用公共空间进行广播活动:“Frank准备好玩一个新游戏”,“Frank和Joe一起开始了一个游戏”等,这有助于保持游戏同步而不是聊天,但是当客户端连接到聊天室时,它将转到“大家好,鲍勃,你们都在做什么”。所以你需要处理好。

    • 交通量。IRC房间可以处理大量的交通,但不能处理大量的交通。大多数都是为了防止“垃圾邮件”、“洪水”等,所以你很可能会受到游戏价格的限制。对“跳棋”来说不是问题,对“魔兽世界”来说更是如此。这是一个游戏设计问题。

    • 服务条款。IRC提供商很可能会说“不,你不能用我们的服务来做这件事”。我没看过,所以我不知道,但可能是个问题。

    除此之外,IRC非常适合。很多IRC机器人程序代码都在网上流传,我从来没有用过。

        3
  •  3
  •   Peter Mortensen icecrime    14 年前

    每一个两人游戏都必须有某种类型的服务器环境,因为至少必须在两个客户机/玩家之间进行通信。请记住,每个客户机/参与者也可以充当自己的服务器,与其他链接客户机通信。但是,在任何给定时间都需要监视所有客户机/播放机,并且为了方便搜索其他客户机/播放机,本质上需要从某种类型的服务器环境开始。

        4
  •  0
  •   BoltBait    15 年前

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

    然后,当然,这对机器中的一台需要充当服务器,另一台需要充当客户机。您的软件必须包含这两组代码。我写了这样一个游戏,可以告诉你,通信代码会变得有点混乱。

    我现在可以告诉你,如果你写一个网络服务来促进交流,你的生活会更快乐。但是,那么,你需要一个服务器。

    祝你好运。你需要它。

    或者,您可以为即时消息客户机(如Microsoft Messenger)编写游戏。我看过那场比赛,所以我知道可以做到。

        5
  •  0
  •   instcode    15 年前

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

        6
  •  0
  •   user1647075    15 年前

    由于防火墙限制,点对点已退出。无论如何,这对于目录服务来说并不容易。

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

    我想你可以加入一些第三方聊天库的事情。我不知道当前的即时通讯协议,但好的旧IRC和一个单独的游戏频道可以工作。你甚至可以用ftp拼凑一些东西。免费博客网站上的博客评论也会起作用。问题是为什么?

    这些都是拼凑的。他们以一种不显眼、不美观、比例不高的方式完成这项工作。

    我敦促您重新考虑Web服务器解决方案。

        7
  •  0
  •   Peter Mortensen icecrime    14 年前

    你有很多相互冲突的要求。防火墙后面的两个客户端都阻止了传入的请求,这意味着它们不能做对等的,因为两台计算机都不能充当服务器,并且您需要在中间有一个传输服务器,将消息路由到每个客户端。现在,由于没有服务器需求,您所要求的几乎不可能实现。