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

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

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

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

У кого-нибудь были бы какие-либо предложения, делающие это?

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

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

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

[ID-NUMBER][Message] %% ID-NUMBER IS A FIXED LENGTH

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

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

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

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

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

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

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

Ответы на вопрос(3)

Ваш ответ на вопрос