如何构建一个简单的 2 人游戏,通过 Internet 进行通信?
我需要解决以下问题:
查找或会合 - 两个玩家想要找到对方。
持续的沟通。任一玩家都可以在相当快的时间范围内(IM 类型的延迟,而不是电子邮件类型的延迟)发起需要将信息传递到另一方的操作。
在这方面,我想它相当于一个双向聊天,人们希望能够找到对方,然后,一旦配对,就可以相互交流。
进一步要求:
现在,假设端点是相对较新的 Windows 操作系统。
假设两个端点机器都不能直接从 Internet 访问。假设它们是客户端机器,隐藏在阻止传入请求的防火墙后面。机器可以发出出站请求。(比如说,通过 HTTP,但 TCP 也可以)
交流应该是私密的。为简单起见,假设已经存在共享密钥,并且端点能够执行 AES。我想我的意思是,任何中介都不应该需要解密消息包。解密只会在端点发生。
所有自定义代码应仅在客户端 PC 上运行。
假设互联网上没有我控制的服务器。
我很乐意使用第三方服务器来促进互通,比如 IM 服务器什么的,只要它是免费的,我不需要在上面安装自定义代码。
有哪些 API 可用于促进这种设计?
我可以使用 IM API 执行此操作吗?WCF?是否有适用于 Windows Messenger 的 WCF 频道?
什么协议?HTTP?我将此标记为“点对点”,但实际上我的意思是;对正式的 p2p 协议没有硬性要求。
你会使用什么消息格式?
编辑
为了澄清有关服务器的要求,我想要的是没有服务器在我的控制之下。并且在任何服务器上都没有我的自定义代码。这与“无服务器”不同。
可以这样想:我可以使用我在发送和接收端编写的自定义代码通过 SMTP 发送电子邮件。我的自定义代码可以通过免费的 SMTP 服务器中介进行连接。这不需要在 SMTP 服务器上安装代码。这就像我想要的,但由于延迟,SMTP 是不可接受的。
EDIT2
我还发现了这个: 即时消息库,如 libpurple,但用 C# 编写
回答
我可以做我想做的事,使用 IM 框架的库。使用 Windows Live Messenger 的一种简单方法是使用Messenger Activity SDK。这证明了这个概念,但并不是真正的通用解决方案。但是,类似的事情可以使用各种信使系统的 IM 库来完成,例如 libpurple,或者使用 IRC 频道的库。在所有这些情况下,IM 服务器都充当穿透防火墙的通信基础设施。