这是一个非常广泛的问题,但我试图从视角给你尽可能多的信息。由于我不确定您是否想要使用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的谷歌资源和教程,并坚持你的知识水平。
祝你好运。
你有问题很有趣,但它不是一个好的问题,为stackoverflow。看看http://stackoverflow.com/help/how-to-ask了解如何提出问题的信息。当你有一个像你这样的非常普遍的问题时,最好的方法是使用一些示例代码和然后问具体问题。您可能想要开始的Adobe API是http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html。 –