0

我有一个 NetConnection 对象:

myNetConnection = new NetConnection();
myNetConnection.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
myNetConnection.connect("rtmp://address");

在处理程序中这样做:

private function statusHandler(event:NetStatusEvent):void
            {
                switch (event.info.code)
                {
                    case "NetConnection.Connect.Success": 
                    {
                        trace("ok");
                        break;
                    }
                    case "NetConnection.Connect.Failed":
                    {
                        trace("Some problems, NetConnection.Connect.Failed");
                        break;
                    }
                }
            }

所以,如果一切正常 - 我在调试控制台中很快就看到了“ok”。但是如果有任何问题 - “一些问题,NetConnection.Connect.Failed”我在长时间等待后看到。我的问题 - 我怎样才能更快地看到“一些问题,NetConnection.Connect.Failed”(因为“ok”快)?

4

2 回答 2

2

你很可能不能。该事件被尽可能快地触发,连接失败需要很长时间才能显现出来。

在我看来,问题在于连接尝试超时。Flash 尝试连接并设置一个计时器,如果计时器在建立连接之前触发 Flash 断定资源不可用。您不能立即失败,因为在计时器触发之前连接不会失败。

Flash 不能立即告诉您资源不可用,因为有时服务器会在几毫秒内响应,但有时可能需要几秒钟。

于 2011-04-07T07:55:20.750 回答
2

这里的问题是,如果 Flash Player 无法使用正常协议(RTMP,端口 1935)连接到服务器,它会自动尝试使用回退协议和端口建立连接。正常顺序是:

netConnection.connect("rtmp://myserver/myapp"); // 使用默认端口 1935 netConnection.connect("rtmp://myserver:443/myapp"); netConnection.connect("rtmp://myserver:80/myapp"); netConnection.connect("rtmpt://myserver:80/myapp");

所有这些尝试都会增加连接的最终超时。

仅当初始连接指定 RTMP 协议并使用默认端口时才会发生此自动重试序列,例如 my_nc.connect("rtmp://myserver/myapp")。

您可以在此处找到更多信息。

于 2011-04-07T08:14:16.330 回答