![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Apelsin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 20.4.2009 Репутация: нет Всего: 1 |
Добрый день.
Необходимо раз в N секунд проверять были ли произведены какие-либо обновления в базе данных. Каким образом правильно это сделать? Пример:
Верна ли логика? Мне кажется, что тут какие-то проблемы с функцией sleep - очень долго происходит реакция на обновление записей. Много ли это - 1 запрос в секунду? |
|||
|
||||
CruorVult |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: 9 Всего: 28 |
Зачем такая логика? Если не было запросов от клиентов на получения количества юзеров - то зачем зря напрягать сервер, темболее каждую секунду. Обычно в том месте, где нужно показать к-во пользователей делать обычный
Если же требуется оптимизация, то можно кроном выполнять переодически подсчет юзеров(не менее раз в минуту) и писать в кеш. Добавлено через 4 минуты и 31 секунду ааа, стоп! Я думал юзеров онлайн! Тогда просто писать в кеш количество юзеров и при добавлении новых переписывать кеш |
||||
|
|||||
Apelsin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 20.4.2009 Репутация: нет Всего: 1 |
Код был представлен в качестве примера. На самом деле пишу игрушку логическую (для саморазвития). И с помощью принципа показанного в примере динамически обновляю список текущих игр. Т.е. пользователь зашел на страницу, тут же создалось с сервером соединение ($.ajax... Вроде как такой принцип называют long polling - создается соединение с помощью js и пока на сервере не произошло изменений, он ничего не выводит и не останавливает выполнение скрипта. Как только обновление произошло - скрипт выводит нужные данные (такой способ инициации обновления со стороны сервера), и в веб браузере происходит их обработка). Наглядно можно посмотреть тут: http://gifsearch.ru/strah/ - если открыть две страницы, в одной из них "создать игру",то в другой должен тут же обновиться список текущих игр (справа) Вот проблема в том, что больше 3 коннектов как-то не получается серверу поддерживать... Пробовал и задержку проверки обновлений по-больше ставить... Мне кажется тут функция sleep виновата... |
|||
|
||||
Apelsin |
|
||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 20.4.2009 Репутация: нет Всего: 1 |
Вот подтверждение моей догадки.
Дан простой скрипт:
Открываем 4 вкладки с адресом sleep.php?sleep=10
Запускаю скрипт примерно одновременно. Получается, что запросы совершенно разных пользователей при использовании sleep будут перекрывать друг друга? А если мне надо просто по-медленнее выполнять скрипт. Чтобы, например, разгрузить БД??? |
||||
|
|||||
CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: 9 Всего: 28 |
так же делать и с новыми играми. Использовать кеш, и при добавлении новой/удаления игры изменять его, чтобы не напрягать мускл. Ну а аяксом прийдется переодически отправлять запросы и смотреть состояние списка игр в кеше. |
|||
|
||||
solenko |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
на php.net инога очень полезно читать не только мануал, но и комментарии пользователей http://ua2.php.net/sleep
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
||||
|
|||||
Absinthe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 4.5.2011 Репутация: 5 Всего: 11 |
|
|||
|
||||
Apelsin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 20.4.2009 Репутация: нет Всего: 1 |
Я читал этот комментарий - но легкого результата он мне не принес, и я как дурак побежал на винград ![]() У меня Пользователь может создать игру, а у другого пользователя тут же необходимо на страничке показать, что кто-то создал игру. Для этого я постоянно в цикле проверяю БД на новые игры... Чтобы разгрузить БД можно проверять не раз в такт (или как сказать правильнее), а раз, например, в 1-2 секунды... Добавлено через 8 минут и 44 секунды У меня чуть-чуть другая логика... Прочел пор этот long polling и пошел на его основе делать... Если брать за основу ваш метод, то придется переписывать все... На ошибках поучусь ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |