[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как разорвать соединение ?
Gradus
Форма поиска работает через асинхронный ajax на jq.
Есть большие запросы которые долго обрабатываются и юзер может не дождаться ответа и изменить критерии поиска либо перезагрузить страницу.
Проблема в том что не пускает сервер пока не закончится прошлая процедура.
Запрос останавливаю jq методом .about() , но как я понял он не обрывает tcp соединение, а всего лишь останавливает запрос браузера.

В php прописано
ignore_user_abort(false);


Как можно решить проблему ?

_____________
ДАВАЙ ДЕНЬГИ
R543264623869
vagrand
Gradus

Я бы советовал вам думать в сторону оптимизации запросов и ускорения работы скрипта поиска а не о том как обрубать соединения. Т.к. насколько я знать mysql пока не выполнит запрос ему до одного места разорвали соединение или нет.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Gradus
vagrand, во первых это не выход из ситуации ( не буду описывать подробности, нехватает только мемкеша или аналога ).
Во вторых вы ошибаетесь с mysql иначе все бы в очереди стояли пока другой юзер запрос не выполнит.

_____________
ДАВАЙ ДЕНЬГИ
R543264623869
Hello
Цитата (Gradus @ 21.11.2012 - 08:09)
Проблема в том что не пускает сервер пока не закончится прошлая процедура.

Проблема или в логике приложения - есть проверки на существующие коннекты, или неправильная настрока сервера - ограничение на кол-во соединений

_____________
VPS от 5$, первые 2 месяца - бесплатно.
vagrand
Gradus
Цитата
Во вторых вы ошибаетесь с mysql иначе все бы в очереди стояли пока другой юзер запрос не выполнит.


Ну начнем с того, что многопоточность никто не отменял, так что не будут. Но вот если кто-то из пользователей выполняет сложный запрос, из-за которого процесс mysql-я отжирает 100% процессорного времени или сильно нагружает HDD вот тут то и возникают большие проблемы.
Я неоднократно сталкивался с ситуацией, когда HTTP соединение, которое породило mysql запрос уже давно закрыто, а процесс mysql все еще висит и кладет сервак в полнейший даун.

Цитата
во первых это не выход из ситуации ( не буду описывать подробности, нехватает только мемкеша или аналога )


Вы сильно ошибаетесь, как раз это то и является самым правильным выходом из ситуации, а то что пытаетесь сделать вы является ничем иным как попыткой убрать только следствие, но ни как не причину.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Gradus
Цитата
из-за которого процесс mysql-я отжирает 100%

Ну это вы уж в крайности кидаетесь, в таком случае. Я такое только один раз видел.
Цитата
Вы сильно ошибаетесь, как раз это то и является самым правильным выходом из ситуации, а то что пытаетесь сделать вы является ничем иным как попыткой убрать только следствие, но ни как не причину.

Я уже сказал что это не выход, не та ситуация под которую вы меня пытаетесь подстроить.Я сам всегда стараюсь максимум усилий сделать на оптимизацию даже с лёгкими запросами.Ещё раз эта не та ситуация и такой выход просто не применим (иначе я бы не обратился на форум) хоть и хотелось бы.

_____________
ДАВАЙ ДЕНЬГИ
R543264623869
vagrand
Gradus
Цитата
Ещё раз эта не та ситуация и такой выход просто не применим (иначе я бы не обратился на форум) хоть и хотелось бы.


Что-это это ваше заявление не стыкуется с более ранним:

Цитата
Есть большие запросы которые долго обрабатываются


А даже если и так, то я вам еще раз повторяю - даже если вы разорвете HTTP соединение, то выполнение запроса к mysql на этом не оборвется.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Gradus
vagrand, вы что издеваетесь ? я в третий раз не буду повторять.
Цитата
А даже если и так, то я вам еще раз повторяю - даже если вы разорвете HTTP соединение, то выполнение запроса к mysql на этом не оборвется.

Вы уверены в этом ? хотя это не столь важно.Всё равно в очереди никто стоять не будет, понятно что в таком случае больше будет загрузка.Но на данный момент важна срочность решения, далее может лучше вариант подберётся.

_____________
ДАВАЙ ДЕНЬГИ
R543264623869
vagrand
Gradus
Цитата
Вы уверены в этом ?


Вы можете это легко проверить. Сгенерируйте таблицу на пару миллионов строк и сделайте скрипт, который будет запускать выполнение сложного запроса. Откройте этот скрипт в браузере и после начала его работы закройте эту страницу и после этого выполните mysql команду "show processlist" и вы увидите свой запрос в списке.

Цитата
Проблема в том что не пускает сервер пока не закончится прошлая процедура.


Он вас и не пускает потому что предыдущий ваш запрос не прекратил свою обработку и ничего вы с этим поделать не сможете не перезагрузив апач или mysql

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Gradus
Цитата
Он вас и не пускает потому что предыдущий ваш запрос не прекратил свою обработку и ничего вы с этим поделать не сможете не перезагрузив апач или mysql

Да бросьте. Как же тогда одновременно асинхронные запросы идут ?
Суть в том что запрос идёт через curl к другому файла (на другой хост).
За это время когда курл работает, нужна возможность послать ещё один запрос.
А так получается как синхронный запрос сейчас работает.

_____________
ДАВАЙ ДЕНЬГИ
R543264623869
vagrand
Gradus

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

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Gradus
vagrand, у нас с вами разговор слепого с глухим.
Кто вам сказал что сервер перегружен, по моим словам определили ?
Для примера опишу вам ситуацию без вашего требования к оптимизации.

Создаём ajax запрос , на сервере пишем sleep(50); (и всё)
Посылаем в это время второй запрос, можем даже отменить abort первый запрос.
Перед вторым запросом убераем sleep(50), так вот этот второй запрос будет ждать когда пройдёт sleep(50) у первого запроса.

Надеюсь сейчас уже не будете заниматся ерундой и очередной раз мне внушать что виноват не волдемор , а оптимизация.

Проблема где-то в настройках сервака, на другом серваке всё норм.

_____________
ДАВАЙ ДЕНЬГИ
R543264623869
Gradus
Виновата сессия.
http://www.tutorialsscripts.com/php-ini-tu..._user_abort.php

Спасла функция session_write_close

Спасибо за советы по решению проблемы smile.gif

_____________
ДАВАЙ ДЕНЬГИ
R543264623869
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.