Как мне обрабатывать сообщения для простого веб-чата на стороне сервера?

Я создаю простой чат в веб-приложении, работающем на Django, но одна вещь, которую я не понимаю, — это то, как я должен хранить сообщения между пользователями.

Чат будет поддерживать несколько пользователей, а «сеанс» чата состоит из пользователей, подключенных к одному пользователю, который является «хостом». Приложение представляет собой своего рода онлайн-инструмент для совместной работы над документами, поэтому у пользователя X есть документ, а пользователи Y и Z подключатся к пользователю X, чтобы обсудить документ, и это будет один сеанс чата.

Если пользователь Y отключился на пять минут, а затем снова вошел в систему и снова подключился к пользователю X, он не должен получать сообщения, которыми обмениваются пользователи X и Z, пока его нет.

если пользователи X, Y и Z могут иметь сеанс чата о документе пользователя X, то пользователи X и Y могут подключиться к одновременному, но раздельному обсуждению документа пользователя Z.

Как мне справиться с этим? Должен ли я хранить каждое сообщение в базе данных? У каждого сообщения будет пользователь-владелец и целевой пользователь (хост), а отдельная таблица будет использоваться для связи пользователей с сообщениями (какие сообщения видны каким пользователям).

Или я должен хранить каждый сеанс в виде HTML-файла на сервере, к которому добавляются сообщения?

Проблема в том, что я не могу просто отправлять сообщения напрямую между клиентами. Они должны быть отправлены на сервер в запросе POST, а затем каждый клиент должен периодически проверять сообщения в запросе GET. За исключением того, что я не могу просто очищать каждое сообщение после того, как клиент его извлекает, потому что клиентов может быть несколько. Как мне это настроить? Какие-либо предложения?


person Carson Myers    schedule 07.05.2010    source источник


Ответы (1)


Дайте каждому сообщению метку времени (или просто увеличивающийся идентификатор). Затем, когда клиент объединяется, вы отправляете ему все сообщения, относящиеся к текущему чату, которые произошли за последние 10 секунд, вместе с их отметками времени. Затем клиент может отфильтровать сообщения, которые он уже получил. Он сливается каждые 5 секунд или около того. Если вам не нужны сообщения для регистрации и т. д., вы можете удалить сообщения старше 10 секунд.

Обратите внимание, что если вы хотите реализовать чат, который будет действительно быстрым и отзывчивым, вам следует рассмотреть возможность использования Reverse Ajax< /а>. В этом случае ответ будет другим. На сервере должен быть список клиентов, зарегистрированных в каждом чате (клиентов, у которых есть ожидающий HttpRequest). Затем сервер отправляет каждому из них каждое опубликованное сообщение.

И не забудьте выполнить поиск, прежде чем изобретать велосипед. . Одной из лучших особенностей django является архитектура подключаемых приложений.

person Ofri Raviv    schedule 07.05.2010
comment
Вы не можете себе представить мое удивление, когда я нажал на ваш поиск, прежде чем вы заново изобрели ссылку на колесо, и Google застрял в правой части моего экрана. - person Carson Myers; 08.05.2010
comment
@Carson - То же самое здесь - и я говорю на иврите! :) - person Edan Maor; 14.11.2010