Какая самая лучшая и самая эффективная методика клиентского пула с Erlang

Я настоящий новичок в Erlang (начал неделю назад), и я пытаюсь изучить этот язык, создав небольшой, но эффективный чат-сервер. (Когда я говорю «эффективный», я имею в виду, что у меня есть 5 серверов, используемых для стресс-теста с сотнями тысяч подключенных клиентов - миллион было бы здорово!)

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

Какой пул клиентов был бы наиболее эффективным для поиска подключенного пользователя? Я думал о регистрации процесса, потому что он, кажется, делает все, что мне нужно, но я действительно не думаю, что это лучший способ сделать это. (Или, по крайней мере, самый красивый способ сделать это).

Есть ли у кого-нибудь предложения по этому поводу?

РЕДАКТИРОВАТЬ:

Каждый подключенный клиент зависит от идентификатора.

Когда пользователь подключен, он сначала отправляет команду входа в систему, чтобы дать свой идентификатор.Когда пользователь хочет отправить сообщение другому, сообщение выглядит так

[НОМЕР ID] [Сообщение] %% НОМЕР ИДЕНТИФИКАЦИИ - ФИКСИРОВАННАЯ ДЛИНА

Когда я спрашиваю «наиболее эффективный пул клиентов», я на самом деле ищу самый быстрый способ получить / добавить / удалить одного клиента в списке подключенных клиентов, который потенциально может быть большим (сотни тысяч - может быть, миллионы)

РЕДАКТИРОВАТЬ 2:

Для ответа на некоторые вопросы:

  • Я использую Raw Socket (Используя telnet прямо сейчас для связи с сервером) - возможно, позже перейду на ssl ...
  • Это мой собственный протокол
  • Каждый клиент - это порожденный Pid
  • Каждый клиентский Pid связан со своим собственным монитором (в основном для отладки причина - клиент, если он отключен, должен повторно подключиться с помощью своей собственной стартовой аутентификации с нуля)
  • Я прочитал пару книг перед тем, как начать кодирование, поэтому я еще не освоил все аспекты Erlang, но я знаю об этом, я Я думаю, я узнаю об этом больше, когда понадобится.
  • То, что я действительно ищу, - это лучший способ хранить и искать эти идентификаторы PID для отправки сообщения напрямую от процесса к процессу.

Должен ли я написать свою собственную функцию клиента поиска с использованием списков?

или я должен использовать ets?

Или даже использовать register / 2 unregister / 1 и whereis / 1 для поддержки моего списка клиентов, используя его уникальный идентификатор в качестве атома, это кажется самым простым способом сделать это, я действительно не знаю, эффективен ли он , но я почти уверен, что это ужасное решение ;-)?

7
задан TheSquad 2 February 2012 в 15:55
поделиться