Я настоящий новичок в Erlang (начался 1 неделю назад), и я пытаюсь выучить этот язык, создав небольшой, но эффективный чат-сервер. (Когда я говорю «эффективный», я имею в виду, что у меня есть 5 серверов для стресс-тестирования с сотнями тысяч подключенных клиентов - миллион был бы отличным!)
Я нашел некоторые учебники, которые делают это, единственное, что каждый учебник, который я нашел, похож на IRC. Если один пользователь отправит сообщение, его получат все пользователи, кроме отправителя.
Я бы хотел немного это изменить и использовать обсуждение один на один.
Каким будет самый эффективный пул клиентов для поиска подключенного пользователя?
Я думал о регистрации процесса, потому что он, кажется, делает все, что мне нужно, но я действительно не думаю, что это лучший способ сделать это. (Или самый красивый способ сделать это в любом случае).
У кого-нибудь были бы какие-нибудь предложения сделать это?
РЕДАКТИРОВАТЬ:
У каждого подключенного клиента есть идентификатор.
Когда пользователь подключен, он сначала отправляет команду входа в систему, чтобы дать ему идентификатор.
Когда пользователь хочет отправить сообщение другому, оно выглядит следующим образом
[ID-NUMBER][Message] %% ID-NUMBER IS A FIXED LENGTH
Когда я спрашиваю «самый эффективный пул клиентов», я на самом деле ищу самый быстрый способ извлечь / добавить / удалить одного клиента в списке подключенных клиентов, который потенциально может быть большим (сотни тысяч - возможно, миллионы) )
РЕДАКТИРОВАТЬ 2:
Для ответа на некоторые вопросы:
- Я использую Raw Socket (сейчас использую telnet для связи с сервером) - возможно, перейду на ssl позже ...
- Это мой собственный протокол
- Каждый клиент является порожденным Pid
- Pid каждого клиента связан с его собственным монитором (в основном по причине отладки - клиент, если он отключен, должен заново подключиться с помощью собственной аутентификации с нуля)
- Я прочитал пару книг перед тем, как начать кодирование, так что я пока не осваиваю все аспекты Erlang, но я не знаю об этом, я буду читать больше об этом, когда это будет необходимо.
- То, что я действительно ищу, - это лучший способ хранения и поиска идентификаторов PID для отправки сообщений непосредственно из процесса в процесс.
Должен ли я написать свою собственную клиентскую функцию поиска, используя списки?
или я должен использовать ets?
Или даже использовать register / 2 unregister / 1 и whereis / 1 для ведения моего списка клиентов, используя его уникальный идентификатор в качестве атома, кажется, это самый простой способ сделать это, я действительно не знаю, насколько это эффективно , но я уверен, что это ужасное решение ;-)?