Erlang / Mochiweb Вопрос новичка об общении с клиентами - PullRequest
0 голосов
/ 19 июля 2011

Каждый раз, когда клиент / браузер подключается к Сервер Mochiweb, он создает новый процесс Loop, не так ли? Итак, если я хочу передать сообщение от одного клиента другому (типичная система чата) должен использовать self () Loop для хранения всех PID подключенных клиентов, не должен Я?

Если что-то (или все) не так, пожалуйста, объясните мне кратко, как система работает, где процесс сервера, а где процесс клиента?

Как отправить сообщение процессу Loop клиента, используя его PID? Я имею в виду, где поставить "получить" в цикле?

Ответы [ 3 ]

1 голос
/ 20 июля 2011

Вот хорошая статья о реализации веб-чата Mochiweb. У клиентов HTTP нет идентификаторов PID, поскольку HTTP - это протокол без сохранения состояния. Вы можете использовать куки для подключения запроса к уникальному посетителю чата.

0 голосов
/ 07 августа 2011

Вы можете использовать несколько структур данных, чтобы избежать использования PID для идентификации. Возьмите пример очереди (). Представьте, что у вас есть реплицированная база данных mnesia с таблицей ОЗУ, в которой вы внедрили однозначно идентифицируемую очередь () для каждого пользователя. Процесс (процесс mochiweb), содержащий соединение с пользователем, содержит только идентификатор этого пользовательского сеанса. Затем он использует эту идентичность, чтобы регулярно проверять его queue () в Mnesia (если вы намереваетесь сделать это таким образом - поддерживать процессы mochiweb живыми в течение всего сеанса пользователей). Тогда это означает, что независимо от того, к какому процессу PID подключен пользователь, если процесс имеет идентификацию пользователя, он может получать (читать) сообщения из своей очереди сообщений (). Следовательно, это может привести к тому, что у пользователя будет несколько клиентских сессий. Этот же процесс может использовать эту идентификацию для отправки сообщений от этого пользователя в очереди других пользователей ().

0 голосов
/ 20 июля 2011

Во-первых, сделайте свое исследование правильно.Проверьте эту статью и эту , а затем эту последнюю .

Позвольте процессам mochiweb передавать данные чата на ваш другой сервер приложений (это может быть gen_server, работник в вашем OTP-приложении со многими супервизорами, другими распределенными работниками и т. Д.).Вы не должны зависеть от PID процесса mochiweb.Иметь другой способ уникальной идентификации ваших пользователей.Файлы cookie, идентификаторы сеансов, токены авторизации и т. Д. Что-то, что управляется только вашим приложением.Пусть процессы mochiweb просто доставляют данные чата на ваши серверы, как только они становятся доступны.Вы можете создать какую-нибудь очередь в mnesia, где у каждого пользователя есть очередь сообщений, в которую другие пользователи публикуют сообщения чата.Затем процессы mochiweb просто продолжают спрашивать mnesia, есть ли сообщение, доступное пользователю при каждом подключении.В целом, это будет зависеть от методологии чата: HTTP Long Polling / COMET, REST / Push-соединения сервера / Keep-alive соединения размытие размытия размытия .... Просто сохраняйте его отказоустойчивым и не включайте процессы mochiweb в движок чата, простопусть mochiweb будет только транспортом и создайте свой чат в джунглях!

...