Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: AJAX. Обращение к серверу только при изменении данных [2]
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
teddy если честно то лениво было читать весь топик
но тут на выручку пришло мое прокачанное умение ясновидеть
итак:
при запросе на сервер в гет параметрах отправляй id последнего полученного сообщения
и возвращай только сообщения после него
остальное дело техники...я правильно сказал? (Добавление)
прочитал всетаки хоть название темы))....увы сие на решаемо
придется запросы отправлять полюбому
возможно поможет чтение web-sockets(гуглить)
soffrick
Отправлено: 26 Июля, 2013 - 19:16:42
Посетитель
Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012 Откуда: Россия, Москва
----- Правильный вопрос - уже половина правильного ответа!
p.s. индусы повсюду, будьте осторожны!
teddy
Отправлено: 26 Июля, 2013 - 19:54:25
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
quinlena
Он не плох, только тут задача другая...
LIME
Честно говоря не очень понял... Вот у нас есть допустим записи в гостевой книге, которые берутся из БД. Записи:
Вася:
Message: Hello, world!
Петя
Message: Hello, Vasya!
Мне нужно что бы новые записи появлялись без перезагрузки страницы. То есть если придет Коля и напишет Hello world, что бы Вася и Петя увидели это сообщение без перезагрузки страницы.
Задача такая: Общение между клиентом и сервером-> Клиент говорит Серверу: Я тебя не буду беспокоить, пока у тебя не появятся новые записи. Или наоборот, сервер говорит, я буду отдыхать и не отвечать на твои позывы, пока у меня не появятся новые записи. То есть не грузить сервак каждый раз setInterval - ом без необходимости.
Часть 2.
Поставлю вопрос по другому: Будет ли нормально, если я каждую секунду буду обращаться к серверу за проверкой данных и если они обновились, то выводить? Это работает, но меня интересует другое: Насколько это критично? Я тут вспомнил, что MySQL кеширует частые запросы - можно как то съехать на это и использовать вариант с setInterval() и обращаться к серверу каждую секунду? На случай если записей много - есть пагинация. Выводить к примеру не более 10 записей на страницу.
Особенно интересует ответ на вопрос, который описал в блоке под названием "Часть 2" (Добавление)
LIME пишет:
возможно поможет чтение web-sockets(гуглить)
Спасибо ) не сразу увидел добавление
А кто нибудь может ответить по поводу того что я описал в Часть 2 в своем предыдущем посте? Очень интересно...
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
DelphinPRO пишет:
Да, это нормально
не стыдно? когда эито стало нормальным раз в секунду теребить сервер? минимум раз в 5 секунд
DelphinPRO пишет:
иной подход - long polling
сложно для тс...хотя парень головитый...тогда лучше веб сокеты наверное teddy запросы пинать придется полюбому...вопрос толька как это оптимизировать (Добавление)
Помог: 211 раз(а) ого))...сходил за хлебушком)) и глядь +4...спасибо добрые люди))
(Добавление) teddy тема неоднозначна....зависит во многом от бизнес-модели
перво наперво как ты решишь кеширование на клиенте...и это верхушка айсберга (Добавление) teddy пожалуй рановато для твоих умений...
DelphinPRO
Отправлено: 26 Июля, 2013 - 22:36:44
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
LIME пишет:
тогда лучше веб сокеты наверное
Да, тоже считаю что вэб-сокеты удобнее и проще в реализации. Но тут встает вопрос кроссбраузерности.
----- Чем больше узнаю, тем больше я не знаю.
armancho7777777
Отправлено: 26 Июля, 2013 - 22:57:10
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
teddy, делайте
teddy пишет:
каждую секунду буду обращаться к серверу за проверкой данных и если они обновились, то выводить
и не парьтесь.
Ну и ответ в json-е. (Добавление)
Можете интервал убавить до 3-5 сек.
Не критично.
teddy
Отправлено: 27 Июля, 2013 - 00:00:09
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DelphinPRO пишет:
Но еще есть иной подход - long polling
Спасибо за ссылку, прочитал, идею понял, только в том классе где описано как создать long polling не очень хорошо понял алгоритм, из за отсутствия практики в применении функций shmop_*
Надо будет попрактиковаться в их использовании, потом может применю этот вариант...
А точнее не понял определение понятия "разделяемая память" в описании shmop_* функций
LIME
Вау, комплименты
LIME пишет:
перво наперво как ты решишь кеширование на клиенте...и это верхушка айсберга
Кеширование я при получении данных аяксом запрещаю, потому что если этого не сделать, IE тупо закеширует первый ответ сервера и уже новые сообщения подгружаться не будут...
armancho7777777
Благодарю, наверное это самый оптимальный для меня вариант в данном случае. Вот только почему именно json? Я делаю приблизительно вот так:
Создаю один output файл, в который аяксом подгружаются данные из БД(из второго файла server.php) а потом просто вывожу эти данные при помощи obj.responseText;
В принципе здесь нет никаких сложных данных что бы использовать json, или обязательно json-ом? Насколько я знаю он нужен для сложных данных, что бы можно было удобно вывести данные в разных частях страницы типа $obj->value; или как то разделить при выводе полученный результат. А тут мне нужно вывести просто текст пришедший из БД в одну точку.
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Вау teddy! Обсуждаем все что я написал в первых сообщениях? (Добавление)
teddy пишет:
прочитал, идею понял, только в том классе где описано как создать long polling не очень хорошо понял алгоритм, из за отсутствия практики в применении функций shmop_*
Какой шмоп? Ёлкзлн ЫЕ!
teddy пишет:
Клиент говорит Серверу: Я тебя не буду беспокоить, пока у тебя не появятся новые записи. Или наоборот, сервер говорит, я буду отдыхать и не отвечать на твои позывы, пока у меня не появятся новые записи.
Это невозможно - ни прямо ни обратно, протокол http - синхронный, пока клиент не спросит, сервер не ответит.
Попытаюсь еще раз:
Клиент шлет запросы не через сет-интервал, а немедленно, но обязательно ждет ответа:
sendRequest();// бесконечный цикл запросов без задержки
});
}
sendRequest();// запуск ракеты
Листен канал сервера крутится в цикле (как в примере по ссылке в моем первом сообщении в этом топике), но не более 20 секунд, и сплевывает данные клиенту только тогда, когда прошли 20 секунд чтобы клиент не закрыл соединение или когда на сервере произошло событие.
На пуш канал на сервере обращаются через другую дырку.
Пуш канал создает событие изменения, поэтому все созданные листены сплевывают клиентам свежие данные. А клиенты делают реконнект на листен. Процесс повторяется.
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DeepVarvar пишет:
Какой шмоп? Ёлкзлн ЫЕ!
Там реализация немного другая ) Я отписал для DelpinPRO про то что не понял из ссылки, не более ) Вот тут эти шмопы ) http://pastebin[dot]com/af8hF88J
DeepVarvar пишет:
Листен канал сервера крутится в цикле (как в примере по ссылке в моем первом сообщении в этом топике), но не более 20 секунд, и сплевывает данные клиенту только тогда, когда прошли 20 секунд чтобы клиент не закрыл соединение или когда на сервере произошло событие.
Да-да я понял идею, но проще я думаю тогда выставить интервал обращения к серверу каждые 20 сек через js и получится одно и тоже.. не? Без дополнительного усердствия
DelphinPRO
Отправлено: 27 Июля, 2013 - 13:31:57
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
teddy пишет:
Да-да я понял идею, но проще я думаю тогда выставить интервал обращения к серверу каждые 20 сек через js и получится одно и тоже.. не?
обрати внимание на конец фразы: или когда на сервере произошло событие.
----- Чем больше узнаю, тем больше я не знаю.
teddy
Отправлено: 27 Июля, 2013 - 13:45:12
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DelphinPRO
Да, но сервер я как поняли и без обращений пашет:
DeepVarvar пишет:
Листен канал сервера крутится в цикле
Или стоп... Может я не совсем правильно понял.
Вот итоговое заключение и поправьте плз кто нибудь если я ошибаюсь:
Цикл запускается только тогда, когда кто то "пнул" серверный файл и если кто то его "пнул", то запускается цикл и отдается ответ от сервера. Если уж не пнули, тогда цикл не запускается и сервер "отдыхает" <- так? (Добавление)
Всё, тему можно закрыть. Мое непонимание некоторых моментов разрешаю списать на шею ошибок молодости ))
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.