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 :: чат php + ajax

 PHP.SU

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


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

> Без описания
Santehnick
Отправлено: 16 Марта, 2013 - 16:43:03
Post Id


Новичок


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


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




Планирую написать чат на php + ajax, под хранилище наверное буду использовать redis. Возник вопрос по поводу того, как извлекать новые сообщения для пользователя. Изначально сразу пришла идея, что клиенту передавать id последнего сообщения, который он потом обратно передает серверу при запросе и сервер соответственно возвращает все сообщения начиная с этого id, но тогда пользователь может подменить id и получить не то, что предполагалось, а те сообщения, которые уже выводились вместе с новыми, а это мне не нужно. Потом думал, что проверять по времени, допустим чат обновляется раз в 15 секунд, тогда показываем только те сообщения, где время сообщения больше чем текущее время - 15 секунд, но тут опять может возникнуть проблема, что у пользователя повис браузер на несколько секунд и соответственно есть риск, что он не получит те сообщения, которые должен был получить. Потом думал, есть вариант чтобы хранить время последнего обращения / id последнего сообщения или что-нибудь другое на стороне сервера в базе или сессии например, но не нравится то, что придется постоянно перезаписывать это значение.

Пока лучший для меня из всех вариантов это передача id последнего сообщения клиенту, который будет послан вместе со следующим запросом к серверу. Но нужно как-то сделать, чтобы клиент не смог бы получить те сообщения, которые уже ему выводились ранее. Может как-то шифровать этот id или что-то еще. Может есть у кого какие идеи или опыт написания такого чата?
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Марта, 2013 - 16:53:31
Post Id



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


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


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




Это что-ж, я как пользователь не имею права позырить историю сообщений в комнате, к которой у меня есть доступ?
Бред же.
 
 Top
esterio
Отправлено: 16 Марта, 2013 - 17:00:51
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Ну я бы сделал так:
Добавил поле - некую метку прочитано ли сообщение
если польователь откривает чат - формируем на ПХП последние скажем 10 сообщений. Отмечаем все непрочитание сообщение как прочитание
тепер при AJAX запросе - отправляем все сообщение в которых метка стоит "непрочитание". И также ставим их проситаими.
как-то так
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Марта, 2013 - 17:03:51
Post Id



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


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


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





esterio, на аватарке: Куб 3 (0), Мистер "Тонкий" или мистер "Быстрый"?
 
 Top
esterio
Отправлено: 16 Марта, 2013 - 17:04:47
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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





DeepVarvar
Не знаю. Просто понравилась картинка. А ч ето такое
Цитата:
Куб 3 (0), Мистер "Тонкий" или мистер "Быстрый"
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Марта, 2013 - 17:05:35
Post Id



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


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


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




Маё старьё.
Малюсенький чатик. Покопайте.
 
 Top
Santehnick
Отправлено: 16 Марта, 2013 - 17:06:23
Post Id


Новичок


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


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




DeepVarvar пишет:
Это что-ж, я как пользователь не имею права позырить историю сообщений в комнате, к которой у меня есть доступ?
Бред же.

Нет конечно, это же чат.

esterio пишет:
Ну я бы сделал так:
Добавил поле - некую метку прочитано ли сообщение
если польователь откривает чат - формируем на ПХП последние скажем 10 сообщений. Отмечаем все непрочитание сообщение как прочитание
тепер при AJAX запросе - отправляем все сообщение в которых метка стоит "непрочитание". И также ставим их проситаими.
как-то так


С таким успехом проще хранить время последнего обращения к серверу или последний id на стороне сервера, тогда никаких проблем не будет, но меня интересует именно просто передача last id на клиент и последующая передача от клиента на сервер, при этом чтобы нельзя было подменой этого самого last id вывести старые сообщения.
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Марта, 2013 - 17:07:08
Post Id



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


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


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





esterio пишет:
А ч ето такое
Это фильм-трилогия: Куб, Куб 2 (Гиперкуб), Куб 3 (0). Советую посмотреть в написанной мной очередности.

(Добавление)
Santehnick пишет:
Нет конечно, это же чат.
Тогда оставьте бессмысленные попытки защиты сообщений от повторного прочтения, путем увеличения нагрузки на сервер.
 
 Top
Santehnick
Отправлено: 16 Марта, 2013 - 17:26:42
Post Id


Новичок


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


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




DeepVarvar пишет:

esterio пишет:
А ч ето такое
Это фильм-трилогия: Куб, Куб 2 (Гиперкуб), Куб 3 (0). Советую посмотреть в написанной мной очередности.

(Добавление)
Santehnick пишет:
Нет конечно, это же чат.
Тогда оставьте бессмысленные попытки защиты сообщений от повторного прочтения, путем увеличения нагрузки на сервер.


Ну да, видимо придется last id хранить на стороне сервера. Ничего, не поделать. Спасибо.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB