AIR 服务器连接

AIR server connections

我想回馈一个小型游戏社区。这个想法是制作一个像聊天客户端一样连接到游戏服务器的应用程序。我试图通过我在网上找到的示例来掌握连接如何工作的概念,因为我是通过查看示例自学的。

到目前为止,我找到的示例都是针对同一网络上的连接。我需要的是某种允许我从不同网络连接的示例,或者至少是对我需要做什么的解释。此外,我需要能够绕过路由器而无需在路由器上设置端口转发。

最后,该应用程序将连接到游戏开发者的服务器,但在获得他的许可连接到他的服务器之前,我需要一个可用的应用程序。

任何帮助将不胜感激。如果需要任何其他信息来提供帮助,请直接询问,我会尽力填补空白。

这是一个非常宽泛的问题,但我尽量从不同的角度为您提供尽可能多的信息。由于我还不确定您是想要 P2P 连接(游戏应用程序到游戏应用程序)还是标准服务器模型,我将仅提及解决此问题的不同方法。

Adobe 有 support for P2P since a long time. Read some FAQ,尤其是 "How does RTMFP differ from RTMP?"(我尝试选择带有信息图表的来源,因为这有助于我理解它)。

您真正应该开始尝试并迈出第一步的应该是 NetConnection. This is the very basic Function that will allow you to communicate to a Server running e.g. PHP or connecting to a Flash Media Server (FMS). FMS is inpartcular interresting for you, as it really boosts the ideas what you game could do, but setting up a FMS is not that easy,to host a own instance is even more complex. So if you come to the conclusion that you want to travel the road of using a FMS, I can suggest you Onyx Server。他们主要将自己作为流媒体服务进行营销,但实际上您可以以合理的价格访问 FMS(我上次检查时亚马逊上的 FMS 实例最差)。 FMS 基本上只是一个带有一些额外命令的 Flash AS2 文件。您的 FMS 可以处理与连接到它的任何客户端的实时(!)持久连接(!)。首先每个人都可以连接到服务器,然后您可以在您的 FMS 脚本中选择客户端必须将什么带到 table 以留在服务器上或被拒绝。在那之后,你就有了一个非常适合游戏的字符串工具。例如,你可以让一个游戏实例连接到它,告诉服务器有敌人被击中并且服务器近乎即时(速度真的很惊人,没有感觉到延迟,它真的是即时的。它被称为SharedObjects) 将此信息传递给敌方游戏实例。我只在一个项目中使用了 FMS,理解它并使用它需要很长时间,但这是一次非常好的体验,因为你像游戏本身一样用 "same" 语言编写服务器代码(AS2, AS3 = ECMA).

如果你现阶段不想花钱,可以使用p2p.rtmfp.net的Adobe RTMFP Instance。据我所知,它仅用于测试,如果您将服务滥用于真实项目,您将被拒绝,但对于启动和测试来说,它就可以了。如果你使用Cirrus Engine,你甚至可以关注this Tutorial。您将在其中找到示例代码:

// Cirrus connect info 
private const SERVER:String = "rtmfp://p2p.rtmfp.net/"; 
private const DEVKEY:String = "{YOUR_DEVELOPER_KEY}"; 

// Used to connect to the Cirrus service
private var _netConnection:NetConnection; 

_netConnection = new NetConnection(); 

// Listen for status info 
_netConnection.addEventListener( NetStatusEvent.NET_STATUS, onNetStatus ); 

// Connect to Cirrus using our unique URI 
_netConnection.connect( SERVER + DEVKEY );

我的建议是:尝试使用 NetConnection 获得舒适感table。这真的很简单。当我第一次开始使用它时,我花了几天时间在网上苦苦挣扎并阅读了很多东西,但我学到了很多东西。你也应该。使用 NetConnection 并尝试创建两个简单的 AS3/FLA 代码实例,它们都连接到同一个域(现在使用 adobe rtmfp 域)并尝试在这些实例之间交换一些简单的字符串数据。

为了减轻您的肩膀疼痛,请像这样向您的 NetConnection 添加最少数量的侦听器:

//Main NetConnector
nc = new NetConnection();

//Troubleshooting Listener
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
nc.addEventListener(NetStatusEvent.NET_STATUS, status_handler);
//nc.objectEncoding = ObjectEncoding.AMF0; //Default
nc.client = this;
nc.connect("https://some-domain");

////////////////////////////////////////////////////////////////////////////////
/// CALL ERROR LISTENER
////////////////////////////////////////////////////////////////////////////////

private function status_handler(e:NetStatusEvent):void {
    //trace("NetStatusEvent");
    dispatchEvent(new CallEvent(CallEvent.CALL_NATIVE_NET_STATUS, e, true ));

}

private function securityErrorHandler(e:SecurityErrorEvent):void {
    //trace("SecurityErrorEvent");
    dispatchEvent(new CallEvent(CallEvent.CALL_NATIVE_SECURITY_ERROR, e, true ));

}

您会收到很多错误以及 netStatus 和 NetSecuriy 事件。当您现在知道自己在做什么时,Flash 经常会 运行 进入沙盒违规错误。这可能会令人沮丧,但如果你坚持下去,google 每个错误并将你的实现与其他人的实现进行比较,你将全神贯注于此并可以用它做一些非常巧妙的事情。

我向您推荐 google NetConnection 的资源和教程,并坚持使用与您的知识水平相符的资源和教程。

祝你好运。