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

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 07 мая 2010

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

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

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

...