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 :: Версия для печати :: чат php + ajax
Форумы портала PHP.SU » PHP » Программирование на PHP » чат php + ajax

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

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

Пока лучший для меня из всех вариантов это передача id последнего сообщения клиенту, который будет послан вместе со следующим запросом к серверу. Но нужно как-то сделать, чтобы клиент не смог бы получить те сообщения, которые уже ему выводились ранее. Может как-то шифровать этот id или что-то еще. Может есть у кого какие идеи или опыт написания такого чата?
2. DeepVarvar - 16 Марта, 2013 - 16:53:31 - перейти к сообщению
Это что-ж, я как пользователь не имею права позырить историю сообщений в комнате, к которой у меня есть доступ?
Бред же.
3. esterio - 16 Марта, 2013 - 17:00:51 - перейти к сообщению
Ну я бы сделал так:
Добавил поле - некую метку прочитано ли сообщение
если польователь откривает чат - формируем на ПХП последние скажем 10 сообщений. Отмечаем все непрочитание сообщение как прочитание
тепер при AJAX запросе - отправляем все сообщение в которых метка стоит "непрочитание". И также ставим их проситаими.
как-то так
4. DeepVarvar - 16 Марта, 2013 - 17:03:51 - перейти к сообщению

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

DeepVarvar
Не знаю. Просто понравилась картинка. А ч ето такое
Цитата:
Куб 3 (0), Мистер "Тонкий" или мистер "Быстрый"
6. DeepVarvar - 16 Марта, 2013 - 17:05:35 - перейти к сообщению
Маё старьё.
Малюсенький чатик. Покопайте.
7. Santehnick - 16 Марта, 2013 - 17:06:23 - перейти к сообщению
DeepVarvar пишет:
Это что-ж, я как пользователь не имею права позырить историю сообщений в комнате, к которой у меня есть доступ?
Бред же.

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

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


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

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

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

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

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


Ну да, видимо придется last id хранить на стороне сервера. Ничего, не поделать. Спасибо.

 

Powered by ExBB FM 1.0 RC1