teddy если честно то лениво было читать весь топик
но тут на выручку пришло мое прокачанное умение ясновидеть
итак:
при запросе на сервер в гет параметрах отправляй id последнего полученного сообщения
и возвращай только сообщения после него
остальное дело техники...я правильно сказал?
(Добавление)
прочитал всетаки хоть название темы))....увы сие на решаемо
придется запросы отправлять полюбому
возможно поможет чтение web-sockets(гуглить)
16. LIME - 26 Июля, 2013 - 19:10:39 - перейти к сообщению
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"
(Добавление)
Спасибо ) не сразу увидел добавление
А кто нибудь может ответить по поводу того что я описал в Часть 2 в своем предыдущем посте? Очень интересно...
А про вебсокеты прочту обязательно
Он не плох, только тут задача другая...
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, делайте
и не парьтесь.
Ну и ответ в json-е.
(Добавление)
Можете интервал убавить до 3-5 сек.
Не критично.
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):
скопировать код в буфер обмена
скопировать код в буфер обмена
- function sendRequest() {
- $.get("/listen.php", function(response){
- if (response.is_new_data) {
- alert("Новые данные приехали!");
- }
- sendRequest(); // бесконечный цикл запросов без задержки
- });
- }
- sendRequest(); // запуск ракеты
Листен канал сервера крутится в цикле (как в примере по ссылке в моем первом сообщении в этом топике), но не более 20 секунд, и сплевывает данные клиенту только тогда, когда прошли 20 секунд чтобы клиент не закрыл соединение или когда на сервере произошло событие.
На пуш канал на сервере обращаются через другую дырку.
Пуш канал создает событие изменения, поэтому все созданные листены сплевывают клиентам свежие данные. А клиенты делают реконнект на листен. Процесс повторяется.
DelphinPRO пишет:
Зачем такое советовать?
Да, это нормально.