Уведомление об отключении канала в api канала в движке приложения Google - PullRequest
4 голосов
/ 12 октября 2011

Я использую мое приложение GAE на моем телефоне. Я сталкиваюсь с проблемой в получении уведомления о разъединении к / _ah / channel / отключен в каналах API, даже если я вручную закрываю сокет функцией socket.close () сообщение происходит с задержкой, скажем, на одну минуту. Кто-нибудь знает способ ускорить процесс? В моем случае socket.close () не выдает уведомления о разрыве канала (только в телефоне, хотя ... он отлично работает с ноутбука)!

1 Ответ

4 голосов
/ 12 октября 2011

Время, которое требуется интерфейсным серверам API канала для "осознания" того, что канал отключен, зависит от реализации браузера.

В браузерах с хорошим поведением мы отлавливаем событие beforeunload и публикуем сообщение нашему клиенту с надписью «этот клиент уходит». В других браузерах мы можем не получить событие (или мы не сможем его прослушать по разным причинам реализации, например, браузер отправляет его слишком часто (FFFUUUU IE)) или когда мы получим событие, которое может получить отправляемый нами XHR проглатывание. В этих случаях интерфейсный сервер понимает, что клиент пропал, потому что он не может получить пульс - это то, что происходит на вашем телефоне. (из любопытства, какой телефон?)

Ваш случай интересен, потому что вы явно вызываете onclose. Единственное, что он делает, - это удаляет iframe с кодом Channel FE - другими словами, onclose ведет себя так, как будто все окно браузера закрыто; он не использует тот факт, что браузер все еще находится в хорошем состоянии и может ждать закрытия до отправки сообщения.

Поэтому я рекомендую две вещи: добавьте в ваш код собственный обработчик (который делает то же самое, что и ваш обработчик / _ah / disconnect), чтобы вы могли просто сделать XHR, когда знаете, что закрываете канал вручную. Это глупо, но функционально. Облом об этом: вам нужно явно знать свой идентификатор клиента в вашем коде javascript.

Во-вторых, добавьте проблему в наш трекер ошибок (http://code.google.com/p/googleappengine/issues/list), чтобы запросить лучшее уведомление о разъединении при явном вызове onclose.

Надеюсь, это поможет; извините, сейчас нет простого ответа.

...