Ajax вызывает очередь при подключении к Flash Socket - PullRequest
2 голосов
/ 19 сентября 2011

У меня проблема с запуском как флеш-сокета, так и использования Ajax для загрузки страниц. Оба отлично работают отдельно. Я могу просматривать свой сайт с помощью вызовов Ajax или отправлять / получать сообщения через сокет.

Однако, когда сокет по какой-то причине подключен, Ajax-вызовы начинают помещаться в очередь и фактически никогда не заканчиваются, пока я не остановлю сокет. Если я отсоединяюсь от сокета или закрываю сокет на стороне сервера, то вызов Ajax немедленно завершает работу и загружает страницу. Вызов Ajax никогда не прерывается, он просто ждет вечно, пока я не закрою сокетное соединение.

В JavaScript я использую функцию jQuery $.getJSON() для загрузки страниц (которые я считал асинхронными вызовами).

Во Flash я использую базовый класс сокетов ActionScript 3:

this._socket = new Socket();
this._socket.addEventListener(Event.CONNECT, onConnectHandler);
this._socket.addEventListener(Event.CLOSE, onCloseHandler);
this._socket.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler);
this._socket.addEventListener(ProgressEvent.SOCKET_DATA, onDataHandler);
this._socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityErrorHandler);

EDIT:

Я подтвердил, что нет HTTP-запрос выполняется. Это на самом деле ставится в очередь браузером по некоторым причинам. Я также заметил, что он не только ставит в очередь запросы Ajax, но также обновляет браузер. Если я нажму кнопку обновления, она тоже навсегда зависнет.

РЕДАКТИРОВАТЬ 2:

На самом деле, я проверял порт 80, когда должен был проверять порт 443. На самом деле, на сервер делается запрос, он просто зависает по какой-то причине. Это заставляет меня поверить, что есть проблема с сокетом (который использует PHP), который заставляет процессор PHP ставить запросы в очередь, или, возможно, Apache ставит запросы в очередь, поскольку видит, что сокет использует PHP. Я до сих пор не уверен, почему дополнительные запросы к процессору PHP не выполняются до тех пор, пока сокет не будет закрыт, но я уверен, что это как-то связано с тем фактом, что сокет PHP находится в всегда открытом состоянии и блокирование других запросов.

1 Ответ

0 голосов
/ 24 сентября 2011

Очевидно, что проблема связана с 2-пределным соединением, которое реализуют браузеры. Поскольку сокет использует одно из постоянных соединений с хостом, остальные HTTP-запросы становятся узкими местами.

Проблема и решение описаны здесь :

... если браузер собирался ограничить количество подключения к одному хосту, что ответ был просто обмануть браузер думать, что он разговаривает с более чем одним хостом. Оказывается сделать это довольно тривиально: просто добавьте несколько CNAME для одного и того же хост к DNS, а затем ссылаться на них в качестве хоста для некоторых из объекты на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...