NetConnection 未处理的 NetStatusEvent
Posted
技术标签:
【中文标题】NetConnection 未处理的 NetStatusEvent【英文标题】:NetConnection unhandled NetStatusEvent 【发布时间】:2013-07-10 16:13:47 【问题描述】:当我使用NetConnection
连接到 Red5 服务器时,有时我会得到一个未经处理的 NetStatusEvent
:
Error #2044: Unhandled NetStatusEvent:. level=error, code=NetConnection.Call.Failed
这就是我连接的方式(唯一调用NetConnection.connect()
的地方):
public function Connect(callBack:Function = null):void
if (IsConnected())
if (callBack != null)
callBack.call();
else // Not connected
netConnect.addEventListener(NetStatusEvent.NET_STATUS, function(e:NetStatusEvent):void
// OnConnect called whenever there is a net status event
OnConnect(e, callBack);
netConnect.removeEventListener(NetStatusEvent.NET_STATUS, arguments.callee);
);
try
// Attempt to connect to Media Server
netConnect.connect(MEDIA_SERVER_URI, true);
catch(error:Error)
logger.LogError("NetConnection.connect threw an exception.", error);
我正在为NetStatusEvent.NET_STATUS
添加一个事件侦听器。有时我的听众怎么可能打电话?
【问题讨论】:
【参考方案1】:您正在删除 NetStatusEvent
处理程序中的侦听器。您应该保留它,直到连接关闭。这就是为什么NetStatusEvent
在其监听器被移除之前只被处理一次。第一个事件以外的任何事件都会引发该错误。
所以删除netConnect.removeEventListener(NetStatusEvent.NET_STATUS, arguments.callee);
NetConnection
会根据发生的情况多次调度该事件。您必须处理事件,直到每次。有关info
属性的可能值列表,请访问此Link。还有一个小例子说明如何处理页面末尾的事件。
【讨论】:
所以在一个 NetConnection.connect() 调用期间可以触发多个 NET_STATUS 事件?connect()
调用会触发 1 个事件,其中包含一组可能的 info
属性,但即使在连接之后,您的 NetConnection
对象也可以为 AppShutdown
、Close
、@ 触发 NET_STATUS
事件987654333@ 或其他一些与连接有关的东西。因此,在关闭 NetConnection
之前,您绝对应该让听众保持原样。
好的,谢谢!我上面的Connect()
函数可能会定期调用。如果我取出removeEventListener
,它将开始触发多个匿名函数。我也无法在构造函数中处理此事件,因为我需要将回调传递给Connect()
。有什么建议吗?
我想你已经通过检查你的isConnected()
方法来处理这个问题,但我不知道你为什么不使用NetConnection
类的connected
属性来代替.您可以做的另一件事是在addEventListener
之前添加removeEventListener
并命名您的匿名函数(使其可从外部移除)。请注意,即使您的 NetConnection
对象没有侦听器,removeEventListener
也不会引发错误。
连接会定期断开,因此 IsConnected() 检查不会阻止将多个匿名函数添加到侦听器。我可以在添加之前尝试删除。否则,我可以保留上面的代码,但在构造函数中包含第二个侦听器以获取跨越 NET_STATUS 事件。这基本上不会做任何事情(可能只是一个日志条目)。感谢您的回复【参考方案2】:
如果您的客户端不处理 onBWCheck 或 onBWDone 方法,您可能会看到这一点。如果您打开了带宽检测,也会发生这种情况;通过更改 red5.properties 文件中的此参数在服务器上关闭它并重新启动服务器。
rtmp.bandwidth_detection=false
【讨论】:
感谢您的回答。我们使用的是 Red5 0.9.1(对不起,我应该在我的问题中指定)。我相信带宽检测仅从版本 1 开始? 0.9的情况下,你可能只需要加上onBWDone【参考方案3】:块引用
只是一个额外的信息。使用 info.level = "error" 调度 NetStatusEvent 对象将始终引发未处理的异常。它是一个特殊的用例。例如,我封装了所有这些功能并将级别更改为“信息”,然后再重新调度事件。
【讨论】:
以上是关于NetConnection 未处理的 NetStatusEvent的主要内容,如果未能解决你的问题,请参考以下文章
为啥没有事件侦听器或引用的封闭 NetConnection 会留在内存中?
ActionScript 3:Socket、amf、NetConnection、rtmp……越来越清楚
Actionscript 4:NetConnection.connect(...) 不会触发 NetStatusEvent 事件
ActionScript 3 Flash NetConnection
如何通过 Java 解码从 NetConnection.call(methodName, responder, parameter) 发送的消息