Flex HTTPService.disconnect () что он должен делать? - PullRequest
0 голосов
/ 20 марта 2012

Я получил файл mxml, который запускает скрипт на моем http-сервере через вызов HTTPService.send ().

Поскольку сценарий на стороне сервера занимает ОЧЕНЬ много времени (это может занять даже больше часа), я хотел бы разорвать соединение между моим приложением air и сервером при нажатии кнопки.

Не знаю, почему, но вызов HTTPService.disconnect () совершенно бесполезен ... Нет соединения tcp, и скрипт продолжает работать на стороне сервера.

Не работает ни HTTPService.cancel (), ни установлено HTTPService var в значение null.

Как я могу сбросить соединение?

Заранее спасибо

1 Ответ

0 голосов
/ 20 марта 2012

Я не уверен, что вы ожидаете, основываясь на документации двух методов, на которые вы ссылаетесь, ни один из них не говорит о том, что он закроет TCP-соединение, наоборот, они говорят, что не ждут или сделать что-нибудь в отношении соединения TCP: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/rpc/http/HTTPService.html

отменить ()

  • Отменяет последний вызов службы или вызов с указанным идентификатором. Даже если сетевая операция все еще может продолжаться, результат или ошибка не отправляются (<- это то, что он делает, останавливает отправку событий для результата или ошибки). </li>

разъединение ()

  • Отключает сетевое соединение службы. Этот метод не ожидает завершения незавершенных сетевых операций (не указывает, что он останавливает существующие сетевые операции, только если он отключает сетевое подключение этих служб).

Вы можете покопаться в источнике, чтобы получить более конкретное представление о том, что происходит, но в основном, как говорится в документации, это просто удаление вызовов из списка, которое он хранит локально, для отправки событий для "активных" вызовов, у которых есть прослушиватели. По сути, у Flex нет возможности узнать, с каким сервисом / сервером он имеет дело, и соответствующим образом дать сигнал серверу отменить все операции, которые он выполняет в данный момент. Вы можете написать другую службу на сервере, которая специально предназначена для уничтожения другого процесса, поэтому вы можете вызвать отмену на HTTPService, а затем отправить еще один запрос на сервер, который выполняет ваш сценарий процесса kill (закрытие открытого сокета, остановка любого в ожидании операций, при необходимости убивая или перезапуская сервисы), но это никак не может быть полностью автоматизировано без знания того, какая обработка выполняется на стороне сервера, и которую вы хотите остановить. Представьте, если бы был открытый шлюз для отмены операций на сервере с помощью клиентского кода, это звучит опасно для меня.

...