BlackBerry OS6 WebWorks ограничивает ajax-запрос до 10, есть ли утечка соединения? - PullRequest
1 голос
/ 13 января 2012

Я занимаюсь разработкой приложения для веб-работ с использованием phonegap и jquerymobile. Я использую soapclient.js для создания запросов мыла на мой бэкэнд-сервер. Мы столкнулись с проблемой тайм-аута, и во время детального расследования мы заметили, что одиннадцатый запрос AJAX не получает ответа. Чтобы поставить вещи в нужное место, мы повторили тест с теми же повторениями вызовов, чтобы мы знали, что конкретный запрос работает.

мы используем низкоуровневый самостоятельно созданный объект xmlhttprequest и до вызова send () ошибок не было. Слушатель изменений onreadystate не вызывается для 11-го вызова.

Время от времени, когда мы достаточно долго ждали, этот 11-й звонок удваивался примерно через 5 минут или около того, заставляя меня поверить, что в поле браузера BlackBerry есть утечка соединения.

Я подозреваю, что существует ограничение в 10 соединений (непараллельно), которое можно установить. Через некоторое время, когда запускается очистка BB-мусора, он очищает несколько старых соединений, и выполняется новое соединение, ожидающее в очереди.

Подробнее

  1. Я проверил из журналов сервера, что в течение этого периода ожидания сервер не получил запрос
  2. Я подтвердил, что это происходит независимо от того, использую ли я Wi-Fi или GPRS
  3. Приложение снова начнет работать, если я закрою его и снова открою, но только до первые 10 запросов

Я попытался прервать запрос, если он прошел мой тайм-аут, вызвав abort () и установив его в null. Но даже тогда я не могу сделать одиннадцатый запрос, если не буду ждать некоторое время.

Я бы поверил любым другим причинам, таким как JavaScript, ожидающий поток пользовательского интерфейса и т. Д., Если бы такое поведение было случайным. Но он воспроизводится на 99% по 11-му запросу, и я несколько раз перепроверил код, чтобы увидеть, есть ли какая-либо переменная или число, сообщаемое из приложения. Предупреждение работает нормально до .send, но обратный вызов не вызывается.

Сейчас я пытаюсь создать очень простое приложение, которое делает ajax-вызовы, чтобы увидеть, является ли это поведение специфичным для моего приложения или это ограничение платформы, но если у кого-то есть такой предыдущий опыт, пожалуйста, поделитесь.

1 Ответ

0 голосов
/ 30 мая 2012

Наконец, после дня борьбы, мы обнаружили, что это происходит из-за назначения функций javascript аппаратным клавишам. Поскольку мы использовали разные пункты меню на разных страницах jQuery, кнопка меню привязана к различным функциям javascript в различных действиях, что приводило к утечке памяти в приложении BB WebWorks. Мы получили разрешение, когда связали аппаратную кнопку меню с глобальной переменной и продолжали заменять ее назначение вместо повторного вызова bind.

...