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
Форумы портала PHP.SU :: Версия для печати :: AJAX. Обращение к серверу только при изменении данных [2]
Форумы портала PHP.SU » » Вопросы новичков » AJAX. Обращение к серверу только при изменении данных

Страниц (2): « 1 [2]
 

16. LIME - 26 Июля, 2013 - 19:10:39 - перейти к сообщению
teddy если честно то лениво было читать весь топик
но тут на выручку пришло мое прокачанное умение ясновидеть
итак:
при запросе на сервер в гет параметрах отправляй id последнего полученного сообщения
и возвращай только сообщения после него
остальное дело техники...я правильно сказал?
(Добавление)
прочитал всетаки хоть название темы))....увы сие на решаемо
придется запросы отправлять полюбому
возможно поможет чтение web-sockets(гуглить)
17. soffrick - 26 Июля, 2013 - 19:16:42 - перейти к сообщению
LIME пишет:
я правильно сказал?

da
(Добавление)
18. teddy - 26 Июля, 2013 - 19:54:25 - перейти к сообщению
quinlena
Он не плох, только тут задача другая...

LIME
Честно говоря не очень понял... Вот у нас есть допустим записи в гостевой книге, которые берутся из БД.
Записи:

Вася:
Message: Hello, world!

Петя
Message: Hello, Vasya!

Мне нужно что бы новые записи появлялись без перезагрузки страницы. То есть если придет Коля и напишет Hello world, что бы Вася и Петя увидели это сообщение без перезагрузки страницы.

Задача такая: Общение между клиентом и сервером-> Клиент говорит Серверу: Я тебя не буду беспокоить, пока у тебя не появятся новые записи. Или наоборот, сервер говорит, я буду отдыхать и не отвечать на твои позывы, пока у меня не появятся новые записи. То есть не грузить сервак каждый раз setInterval - ом без необходимости.

Часть 2.
Поставлю вопрос по другому: Будет ли нормально, если я каждую секунду буду обращаться к серверу за проверкой данных и если они обновились, то выводить? Это работает, но меня интересует другое: Насколько это критично? Я тут вспомнил, что MySQL кеширует частые запросы - можно как то съехать на это и использовать вариант с setInterval() и обращаться к серверу каждую секунду? На случай если записей много - есть пагинация. Выводить к примеру не более 10 записей на страницу.

Особенно интересует ответ на вопрос, который описал в блоке под названием "Часть 2"
(Добавление)
LIME пишет:
возможно поможет чтение web-sockets(гуглить)

Спасибо ) не сразу увидел добавление

А кто нибудь может ответить по поводу того что я описал в Часть 2 в своем предыдущем посте? Очень интересно...

А про вебсокеты прочту обязательно
19. DelphinPRO - 26 Июля, 2013 - 21:06:20 - перейти к сообщению
teddy пишет:
Будет ли нормально, если я каждую секунду буду обращаться к серверу за проверкой данных и если они обновились, то выводить?
Да, это нормально.

Но еще есть иной подход - long polling
20. LIME - 26 Июля, 2013 - 21:44:11 - перейти к сообщению
DelphinPRO пишет:
Да, это нормально
не стыдно? когда эито стало нормальным раз в секунду теребить сервер? минимум раз в 5 секунд
DelphinPRO пишет:
иной подход - long polling
сложно для тс...хотя парень головитый...тогда лучше веб сокеты наверное
teddy запросы пинать придется полюбому...вопрос толька как это оптимизировать
(Добавление)

Помог: 211 раз(а) ого))...сходил за хлебушком)) и глядь +4...спасибо добрые люди))

(Добавление)
teddy тема неоднозначна....зависит во многом от бизнес-модели
перво наперво как ты решишь кеширование на клиенте...и это верхушка айсберга
(Добавление)
teddy пожалуй рановато для твоих умений...
21. DelphinPRO - 26 Июля, 2013 - 22:36:44 - перейти к сообщению
LIME пишет:
тогда лучше веб сокеты наверное

Да, тоже считаю что вэб-сокеты удобнее и проще в реализации. Но тут встает вопрос кроссбраузерности.
22. armancho7777777 - 26 Июля, 2013 - 22:57:10 - перейти к сообщению
teddy, делайте
teddy пишет:
каждую секунду буду обращаться к серверу за проверкой данных и если они обновились, то выводить

и не парьтесь.
Ну и ответ в json-е.
(Добавление)
Можете интервал убавить до 3-5 сек.
Не критично.
23. teddy - 27 Июля, 2013 - 00:00:09 - перейти к сообщению
DelphinPRO пишет:
Но еще есть иной подход - long polling

Спасибо за ссылку, прочитал, идею понял, только в том классе где описано как создать long polling не очень хорошо понял алгоритм, из за отсутствия практики в применении функций shmop_*
Надо будет попрактиковаться в их использовании, потом может применю этот вариант...

А точнее не понял определение понятия "разделяемая память" в описании shmop_* функций

LIME
Вау, комплименты Ха-ха

LIME пишет:
перво наперво как ты решишь кеширование на клиенте...и это верхушка айсберга

Кеширование я при получении данных аяксом запрещаю, потому что если этого не сделать, IE тупо закеширует первый ответ сервера и уже новые сообщения подгружаться не будут...

armancho7777777
Благодарю, наверное это самый оптимальный для меня вариант в данном случае. Вот только почему именно json? Я делаю приблизительно вот так:

Создаю один output файл, в который аяксом подгружаются данные из БД(из второго файла server.php) а потом просто вывожу эти данные при помощи obj.responseText;

В принципе здесь нет никаких сложных данных что бы использовать json, или обязательно json-ом? Насколько я знаю он нужен для сложных данных, что бы можно было удобно вывести данные в разных частях страницы типа $obj->value; или как то разделить при выводе полученный результат. А тут мне нужно вывести просто текст пришедший из БД в одну точку.

Я всем надоел?
24. DeepVarvar - 27 Июля, 2013 - 01:47:37 - перейти к сообщению
Вау teddy! Обсуждаем все что я написал в первых сообщениях?
(Добавление)
teddy пишет:
прочитал, идею понял, только в том классе где описано как создать long polling не очень хорошо понял алгоритм, из за отсутствия практики в применении функций shmop_*
Какой шмоп? Ёлкзлн ЫЕ!


teddy пишет:
Клиент говорит Серверу: Я тебя не буду беспокоить, пока у тебя не появятся новые записи. Или наоборот, сервер говорит, я буду отдыхать и не отвечать на твои позывы, пока у меня не появятся новые записи.
Это невозможно - ни прямо ни обратно, протокол http - синхронный, пока клиент не спросит, сервер не ответит.

Попытаюсь еще раз:

Клиент шлет запросы не через сет-интервал, а немедленно, но обязательно ждет ответа:
CODE (javascript):
скопировать код в буфер обмена
  1. function sendRequest() {
  2.   $.get("/listen.php", function(response){
  3.     if (response.is_new_data) {
  4.       alert("Новые данные приехали!");
  5.     }
  6.     sendRequest(); // бесконечный цикл запросов без задержки
  7.   });
  8. }
  9. sendRequest(); // запуск ракеты


Листен канал сервера крутится в цикле (как в примере по ссылке в моем первом сообщении в этом топике), но не более 20 секунд, и сплевывает данные клиенту только тогда, когда прошли 20 секунд чтобы клиент не закрыл соединение или когда на сервере произошло событие.

На пуш канал на сервере обращаются через другую дырку.
Пуш канал создает событие изменения, поэтому все созданные листены сплевывают клиентам свежие данные. А клиенты делают реконнект на листен. Процесс повторяется.

DelphinPRO пишет:
Да, это нормально.
Зачем такое советовать?
25. teddy - 27 Июля, 2013 - 13:28:07 - перейти к сообщению
DeepVarvar пишет:
Какой шмоп? Ёлкзлн ЫЕ!

Там реализация немного другая ) Я отписал для DelpinPRO про то что не понял из ссылки, не более ) Вот тут эти шмопы ) http://pastebin[dot]com/af8hF88J

DeepVarvar пишет:
Листен канал сервера крутится в цикле (как в примере по ссылке в моем первом сообщении в этом топике), но не более 20 секунд, и сплевывает данные клиенту только тогда, когда прошли 20 секунд чтобы клиент не закрыл соединение или когда на сервере произошло событие.

Да-да я понял идею, но проще я думаю тогда выставить интервал обращения к серверу каждые 20 сек через js и получится одно и тоже.. не? Без дополнительного усердствия
26. DelphinPRO - 27 Июля, 2013 - 13:31:57 - перейти к сообщению
teddy пишет:
Да-да я понял идею, но проще я думаю тогда выставить интервал обращения к серверу каждые 20 сек через js и получится одно и тоже.. не?

обрати внимание на конец фразы: или когда на сервере произошло событие.
27. teddy - 27 Июля, 2013 - 13:45:12 - перейти к сообщению
DelphinPRO
Да, но сервер я как поняли и без обращений пашет:
DeepVarvar пишет:
Листен канал сервера крутится в цикле

Или стоп... Может я не совсем правильно понял.

Вот итоговое заключение и поправьте плз кто нибудь если я ошибаюсь:
Цикл запускается только тогда, когда кто то "пнул" серверный файл и если кто то его "пнул", то запускается цикл и отдается ответ от сервера. Если уж не пнули, тогда цикл не запускается и сервер "отдыхает" <- так?
(Добавление)
Всё, тему можно закрыть. Мое непонимание некоторых моментов разрешаю списать на шею ошибок молодости ))
28. armancho7777777 - 29 Июля, 2013 - 07:40:23 - перейти к сообщению
teddy пишет:
Вот только почему именно json?

Компактнее.

 

Powered by ExBB FM 1.0 RC1