Cuál es la mejor y más eficiente técnica de agrupación de clientes con Erlang

Soy un verdadero novato de Erlang (comencé hace 1 semana) y estoy tratando de aprender este idioma creando un servidor de chat pequeño pero eficiente. (Cuando digo eficiente, quiero decir que tengo 5 servidores utilizados para probar esto con cientos de miles de clientes conectados: ¡un millón sería genial!)

He encontrado algunos tutoriales que lo hacen, lo único es que cada tutorial que encontré es como IRC. Si un usuario envía un mensaje, todos los usuarios excepto el remitente lo recibirán. Me gustaría cambiar eso un poco, y usar la discusión uno a uno.

¿Cuál sería el grupo de clientes más efectivo para buscar un usuario conectado? Pensé en registrar el proceso, porque parece hacer todo lo que necesito, pero realmente no creo que esta sea la mejor manera de hacerlo. (O la forma más bonita de hacerlo de todos modos).

¿Alguien tiene alguna sugerencia para hacer esto?

EDIT:

Cada cliente conectado se ve afectado por una ID.

Cuando el usuario está conectado, primero envía un comando de inicio de sesión para darle su identificación. Cuando un usuario desea enviar un mensaje a otro, el mensaje se ve así

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

Cuando solicito "el grupo de clientes más efectivo", en realidad estoy buscando la forma más rápida de recuperar / agregar / eliminar un cliente en la lista de clientes conectados que podría ser potencialmente grande (cientos de miles, quizás millones)

EDIT 2:

Para responder algunas preguntas:

Estoy usando Raw Socket (usando telnet en este momento para comunicarme con el servidor) - probablemente pasaré a SSL más tarde ...Es mi propio protocolo Cada cliente es un Pid genera Cada Pid del cliente está vinculado a su propio monitor (principalmente por razones de depuración: el cliente, si está desconectado, debe volver a conectarse por su propia cuenta, comenzando desde cero)He leído un par de libros antes de comenzar a codificar, así que todavía no domino todos los aspectos de Erlang, pero no estoy al tanto de ello, creo que leeré más sobre él cuando sea necesario.o que realmente estoy buscando es la mejor manera de almacenar y buscar esos PID para enviar mensajes directamente de un proceso a otr

Debo escribir mi propia función de búsqueda de cliente usando listas?

¿o debo usar ets?

O incluso use register / 2 unregister / 1 y whereis / 1 para mantener mi lista de clientes, usando su identificación única como átomo, parece ser la forma más sencilla de hacerlo, realmente no sé si es eficiente, pero Estoy bastante seguro de que esta es la solución fea ;-)?

Respuestas a la pregunta(6)

Su respuesta a la pregunta