2015-06-13 55 views
0

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

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

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

任何帮助将不胜感激。如果需要提供任何其他信息以帮助提问,我会尽我所能填补空白。

+0

你有问题很有趣,但它不是一个好的问题,为stackoverflow。看看http://stackoverflow.com/help/how-to-ask了解如何提出问题的信息。当你有一个像你这样的非常普遍的问题时,最好的方法是使用一些示例代码和然后问具体问题。您可能想要开始的Adobe API是http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html。 –

回答

0

这是一个非常广泛的问题,但我试图从视角给你尽可能多的信息。由于我不确定您是否想要使用P2P连接(游戏应用程序到游戏应用程序)或标准服务器模型,我只会提到解决此问题的不同方法。

很久以前,Adobe有support for P2P。请阅读FAQ,特别是“RTMFP与RTMP有何不同?” (我试图用信息图选择信息来源,因为这有助于我理解它)。

你真的应该开始玩的第一步,应该是NetConnection。这是一个非常基本的功能,可以让您与运行的服务器进行通信。 PHP或连接到Flash Media Server(FMS)。 FMS对你来说是在外部干扰,因为它真的提高了你的游戏能做的想法,但是建立一个FMS并不是那么容易,举办一个自己的实例更加复杂。所以,如果你得出结论,你想走一条使用FMS的道路,我可以建议你Onyx Server。他们主要将自己推销为流媒体服务,但事实上,您可以以优惠的价格访问FMS(亚马逊上的FMS实例最后一次检查的方式是最差的)。 FMS基本上只有一个带有一些额外命令的Flash AS2文件。您的FMS可以处理与连接到它的任何客户端的实时(!)持久连接(!)。每个人都可以首先连接到服务器,然后你可以在你的FMS脚本中选择客户端必须带到桌面以保留在服务器上还是被拒绝。之后,你有一个非常串行的游戏工具。例如,你可以有一个游戏实例连接到它,告诉服务器敌人被击中并且服务器立即接近(速度真的很棒,没有延迟的延迟,它实际上是瞬间的,它被称为SharedObjects)通过这个信息下降到敌方游戏实例。我只在一个项目中使用FMS,并且理解它并使用它非常耗时,但它是一个非常好的体验,因为您使用“相同”语言(如游戏本身)编码服务器(AS2,AS3 = ECMA)。

如果您不想在此阶段花钱,可以在p2p.rtmfp.net上使用Adobe RTMFP实例。就我所知,它只是用于测试,如果您将服务误用于实际项目,但在启动和测试时会遭到拒绝,则会被拒绝。如果您使用Cirrus引擎,您甚至可以按照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感到舒服。它非常简单。当我第一次开始使用它的时候,我在网络上经历了几天的苦苦挣扎和阅读,但是我学到了很多东西。你也应该。使用NetConnection并尝试创建两个连接到同一个域(现在使用adobe rtmfp域)的代码的两个简单的AS3/FLA实例,并尝试在这些实例之间交换一些简单的String-Data。

采取一些你的肩膀的疼痛,听众的最低金额添加到您的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经常会遇到沙箱 - 违规错误。这可能令人沮丧,但如果你保持它,谷歌每一个错误,并将你的实现与其他人的实现进行比较,你将围绕这一点,并可以做它真正干净的东西。

我推荐你使用NetConnection的谷歌资源和教程,并坚持你的知识水平。

祝你好运。

+0

感谢您的信息。 –