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]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
LIME
Отправлено: 26 Июля, 2013 - 19:10:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




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



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


Помог: 17 раз(а)




LIME пишет:
я правильно сказал?

da
(Добавление)

(Отредактировано автором: 26 Июля, 2013 - 19:17:57)



-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
teddy
Отправлено: 26 Июля, 2013 - 19:54:25
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




quinlena
Он не плох, только тут задача другая...

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

Вася:
Message: Hello, world!

Петя
Message: Hello, Vasya!

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

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

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

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

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

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

А про вебсокеты прочту обязательно

(Отредактировано автором: 26 Июля, 2013 - 19:58:42)

 
 Top
DelphinPRO
Отправлено: 26 Июля, 2013 - 21:06:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




teddy пишет:
Будет ли нормально, если я каждую секунду буду обращаться к серверу за проверкой данных и если они обновились, то выводить?
Да, это нормально.

Но еще есть иной подход - long polling

(Отредактировано автором: 26 Июля, 2013 - 21:07:33)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
LIME
Отправлено: 26 Июля, 2013 - 21:44:11
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




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

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

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



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




LIME пишет:
тогда лучше веб сокеты наверное

Да, тоже считаю что вэб-сокеты удобнее и проще в реализации. Но тут встает вопрос кроссбраузерности.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
armancho7777777 Супермодератор
Отправлено: 26 Июля, 2013 - 22:57:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




teddy, делайте
teddy пишет:
каждую секунду буду обращаться к серверу за проверкой данных и если они обновились, то выводить

и не парьтесь.
Ну и ответ в json-е.
(Добавление)
Можете интервал убавить до 3-5 сек.
Не критично.
 
 Top
teddy
Отправлено: 27 Июля, 2013 - 00:00:09
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




DelphinPRO пишет:
Но еще есть иной подход - long polling

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

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

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

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

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

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

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

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

Я всем надоел?

(Отредактировано автором: 27 Июля, 2013 - 00:32:04)

 
 Top
DeepVarvar Супермодератор
Отправлено: 27 Июля, 2013 - 01:47:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Вау 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 пишет:
Да, это нормально.
Зачем такое советовать?
 
 Top
teddy
Отправлено: 27 Июля, 2013 - 13:28:07
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




DeepVarvar пишет:
Какой шмоп? Ёлкзлн ЫЕ!

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

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

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



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




teddy пишет:
Да-да я понял идею, но проще я думаю тогда выставить интервал обращения к серверу каждые 20 сек через js и получится одно и тоже.. не?

обрати внимание на конец фразы: или когда на сервере произошло событие.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 27 Июля, 2013 - 13:45:12
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




DelphinPRO
Да, но сервер я как поняли и без обращений пашет:
DeepVarvar пишет:
Листен канал сервера крутится в цикле

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

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

(Отредактировано автором: 27 Июля, 2013 - 13:49:27)

 
 Top
armancho7777777 Супермодератор
Отправлено: 29 Июля, 2013 - 07:40:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




teddy пишет:
Вот только почему именно json?

Компактнее.
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB