Всем привет.
У меня следующий вопрос.
К примеру зашло 3 человека на сайт. Им выдало каждому 10 000 строк информации.
Есть допустим некий файл stroki-ajax-php , который подключается к mysql и выдергивает оттуда на ajax 10 000 строк из базы и выводит их.
Далее в какой-то из строк произошло изменение каким-то человеком, которое улетело в базу.
Как мне обновить в следующий момент страницу,но чтобы обновлялась лишь одна строка, в которой произошли изменения, а не обновлять снова все 10 000 ?
Подскажите, про что тут нужно почитать или может какой-то примерчик.
Спасибо
1. deu - 09 Сентября, 2019 - 02:47:10 - перейти к сообщению
2. andrewkard - 09 Сентября, 2019 - 11:32:45 - перейти к сообщению
Ставите в базе статус строчке "обновлена" и время обновления, аяксом в цикле шлете запрос на сервер, например 1 раз в минуту, на котором скрипт будет спрашивать в базе есть ли обновленные записи за последнюю минуту, и если есть возвращать ее, если есть данные, обновляем их.
Как то так
Как то так
3. deu - 09 Сентября, 2019 - 12:43:06 - перейти к сообщению
andrewkard пишет:
Ставите в базе статус строчке "обновлена" и время обновления, аяксом в цикле шлете запрос на сервер, например 1 раз в минуту, на котором скрипт будет спрашивать в базе есть ли обновленные записи за последнюю минуту, и если есть возвращать ее, если есть данные, обновляем их.
Как то так
Как то так
Мне не подходит раз в минуту.
Требуется раз в секунду,как описано выше.
И если есть обновление в базе, как мне из этих строк,
заменить только изменившуюся ? ( при выводе )
4. LIME - 09 Сентября, 2019 - 13:40:28 - перейти к сообщению
5. andrewkard - 09 Сентября, 2019 - 14:09:20 - перейти к сообщению
deu пишет:
Требуется раз в секунду,как описано выше.
забаните свой же сервер
6. LIME - 09 Сентября, 2019 - 17:00:29 - перейти к сообщению
andrewkard это как?
7. andrewkard - 09 Сентября, 2019 - 17:34:16 - перейти к сообщению
LIME пишет:
это как
раз в секунду долбить сервер как то не комильфо
8. LIME - 09 Сентября, 2019 - 17:35:41 - перейти к сообщению
Согласен
Тут больше pubsub подойдет. Но где его забанят? Чет не понятно
(Добавление)
Может зафлудишь имеется ввиду?
(Добавление)
Задосишь там например
Тут больше pubsub подойдет. Но где его забанят? Чет не понятно
(Добавление)
Может зафлудишь имеется ввиду?
(Добавление)
Задосишь там например
9. andrewkard - 09 Сентября, 2019 - 17:48:12 - перейти к сообщению
LIME пишет:
Задосишь там например
да именно это имелось в виду
Ты еще на больничном?
10. LIME - 09 Сентября, 2019 - 17:55:38 - перейти к сообщению
andrewkard пишет:
ну при небольшом количестве клиентов, а я уверен почти что это так, ничего страшного не случится, особенно если закэшировать. Но можно перебраться за лимиты хостинга по io , потому лучше все же рассылать событие клиентам, а не запрашивать.да именно это имелось в виду
Да, болею ужо третий месяц как пошел.
11. deu - 09 Сентября, 2019 - 21:22:49 - перейти к сообщению
LIME пишет:
Пока подобрал технологию Long Polling.
Или в этом плане веб-сокеты подойдут лучше ?
12. LIME - 09 Сентября, 2019 - 21:38:02 - перейти к сообщению
Подойдут лучше, но не поддерживаются в старых браузерах, но проще разворачиваются. Вернее их не надо разворачивать, в отличии от comet сервера для long polling
13. deu - 15 Сентября, 2019 - 17:59:07 - перейти к сообщению
Я немного запутался.
Я взял пару примеров Long Polling из интернета и в целом не увидел принципиальной разницы, если делать обычную схему:
setInterval + ajax , так как в Long Polling он все равно обновляет страницу целиком, как и в стандартном Ajax.
Когда мне нужно заменить лишь старые строки на новые, если есть новые.
А старые не заменять.
Я взял пару примеров Long Polling из интернета и в целом не увидел принципиальной разницы, если делать обычную схему:
setInterval + ajax , так как в Long Polling он все равно обновляет страницу целиком, как и в стандартном Ajax.
Когда мне нужно заменить лишь старые строки на новые, если есть новые.
А старые не заменять.
14. Jery - 16 Сентября, 2019 - 08:52:36 - перейти к сообщению
Добрый день!
прошу помочь разобраться, почему выполняется второй запрос, а первый нет… При этом первый выполняется без второго?
vvar xmlHttp
function showLizo(str)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Браузер не поддерживает запросы HTTP")
return
}
//Первый запрос
{
var url="LizoOrg.asp"
url=url+"?q="+str+"&v=1"
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
xmlHttp.onreadystatechange=state Changed1
}
//Второй запрос
{
var url="LizoOrg.asp"
url=url+"?q="+str+"&v=2"
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
xmlHttp.onreadystatechange=state Changed2
}
}
function stateChanged1()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("Podr").innerHTML=xmlHttp. responseText
}
}
function stateChanged2()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("Dolgn").innerHTML=xmlHttp .responseText
}
}
function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}
прошу помочь разобраться, почему выполняется второй запрос, а первый нет… При этом первый выполняется без второго?
vvar xmlHttp
function showLizo(str)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Браузер не поддерживает запросы HTTP")
return
}
//Первый запрос
{
var url="LizoOrg.asp"
url=url+"?q="+str+"&v=1"
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
xmlHttp.onreadystatechange=state Changed1
}
//Второй запрос
{
var url="LizoOrg.asp"
url=url+"?q="+str+"&v=2"
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
xmlHttp.onreadystatechange=state Changed2
}
}
function stateChanged1()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("Podr").innerHTML=xmlHttp. responseText
}
}
function stateChanged2()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("Dolgn").innerHTML=xmlHttp .responseText
}
}
function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}
15. new01 - 30 Октября, 2019 - 12:13:08 - перейти к сообщению
Я бы на твоем месте написал серверную часть на node.js и использовал сокеты. Загугли почитай, ничего сложного нет. Там буквально у тебя пару сотен строк кода будет, если не меньше. При изменении данных можно просто отправлять всем клиентам с сервера новый фрагмент и всю инфу о нем. Это гораздо легче и эффективнее. Делать setInterval на стороне клиента уже не круто и глупо как по мне. Тем более раз в секунду))