Как отключить соединение RTMP?

Знаете ли вы, возможно ли на самом деле отключить соединение rtmp и как? В официальном документе нет метода "отключить", а также в файле rtmpconnection.lzx . Так что, если вы знаете выход для отключения соединения rtmp, пожалуйста, дайте мне знать. Заранее спасибо.

1 ответ

Класс в OpenLaszlo использует класс ActionScript 3 NetConnection для подключения к серверу. Класс NetConnection имеет метод close(), вот документация для этого:

Закрывает соединение, которое было открыто локально или на сервер, и отправляет событие netStatus со свойством кода NetConnection.Connect.Closed.

Этот метод отключает все объекты NetStream, работающие через соединение. Любые данные из очереди, которые не были отправлены, отбрасываются. (Чтобы завершить локальные или серверные потоки без закрытия соединения, используйте NetStream.close().) Если вы закрываете соединение, а затем хотите создать новое, необходимо создать новый объект NetConnection и снова вызвать метод connect().

Метод close() также отключает все удаленные общие объекты, работающие через это соединение. Однако вам не нужно заново создавать общий объект для повторного подключения. Вместо этого вы можете просто вызвать SharedObject.connect(), чтобы восстановить соединение с общим объектом. Кроме того, любые данные в общем объекте, которые были помещены в очередь при создании NetConnection.close(), отправляются после восстановления подключения к общему объекту.

При использовании Flash Media Server лучшим способом разработки является вызов close(), когда клиенту больше не требуется соединение с сервером. Вызов close() - это самый быстрый способ очистить неиспользуемые соединения. Вы можете настроить сервер так, чтобы он автоматически закрывал незанятые соединения в качестве резервной меры.

В исходном коде 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);
    }
....

Я не знаю, почему в классе не определен метод close, но вы можете добавить этот код для себя, расширив и добавив метод close. Просто убедитесь, что вы правильно обрабатываете переменные состояния.

Поскольку я долгое время не использовал Red5, я не могу сказать вам, автоматически ли Red5 закрывает NetConnections, которые находятся в режиме ожидания.

Другие вопросы по тегам