Do you know if it's possible actually to disconnect a rtmpconnection and how ? There is no "disconnect" method in the official doc, and also in the rtmpconnection.lzx . So if you know a way out to disconnect the rtmp connection,please let me know. Thanks in advance.
1 回答
OpenLaszlo 中的<rtmpconnection> 类使用ActionScript 3 NetConnection 类连接到服务器。NetConnection 类有一个方法 close(),这里是它的文档:
关闭在本地打开或到服务器的连接,并调度带有 NetConnection.Connect.Closed 代码属性的 netStatus 事件。
此方法断开连接上运行的所有 NetStream 对象。任何尚未发送的排队数据都将被丢弃。(要在不关闭连接的情况下终止本地或服务器流,请使用 NetStream.close()。)如果您关闭了连接,然后想要创建一个新连接,则必须创建一个新的 NetConnection 对象并再次调用 connect() 方法。
close() 方法还会断开在此连接上运行的所有远程共享对象。但是,您无需重新创建共享对象即可重新连接。相反,您可以调用 SharedObject.connect() 来重新建立与共享对象的连接。此外,在您重新建立与共享对象的连接后,将发送在您发出 NetConnection.close() 时排队的共享对象中的任何数据。
对于 Flash Media Server,最佳开发实践是在客户端不再需要与服务器的连接时调用 close()。调用 close() 是清理未使用连接的最快方法。您可以将服务器配置为自动关闭空闲连接作为备用措施。
在 <rtmpconnection> 的 LZX 源代码中,我可以看到 NetConnection.close() 仅在连接失败的情况下被调用:
<!--- Handle connection failure, attempt to reconnect using altsrc
@keywords private -->
<method name="_handleConnectionFailure" args="msg"><![CDATA[
this._nc.close();
if (this.debug) {
if ($debug) Debug.warn("error connecting to", this._connecturl, ":", msg);
}
....
我不知道为什么在 <rtmpconnection> 类上没有定义 close 方法,但是您可以通过扩展 <rtmpconnection> 并添加 close 方法为自己添加该代码。只要确保正确处理状态变量即可。
由于我已经很久没有使用 Red5 了,所以我无法告诉你 Red5 是否会自动关闭空闲的 NetConnections。