transmision siaf sia linea datos erlang

erlang - siaf - sia en linea



¿Cómo debe tratar Erlang los datos comunes? (1)

(Casi no tengo experiencia con Erlang, solo leo algunos libros) Supongamos que estoy construyendo un servidor de juegos usando Erlang.

Es muy común que cada usuario controle algo (por ejemplo, encontrar el jugador más cercano), por lo que normalmente hay una clase de gerente.

En el caso anterior, usamos bloqueo mutex.

Como sé, Erlang crea un nuevo proceso de Erlang por cada conexión TCP (sesión de usuario) normalmente. Entonces, ¿cómo se puede hacer circular la lista de la sesión del usuario?

Si tengo el proceso principal para esas sesiones de usuario y solicito el proceso principal, puede ser un cuello de botella.


Ahora, antes de continuar, puede ver estas preguntas y respuestas: Erlang: trabajo distribuido en una matriz , Erlang gen_server con tareas de larga ejecución y cuál es la mejor y más eficiente técnica de pool de clientes con Erlang.

Ahora, aprenda sobre ETS Tables y Mnesia . Entonces quizás puedas mirar a GProc . Hacer un proceso para mantener datos de estado especialmente para un juego es peligroso porque el estado puede perderse cuando el proceso finaliza. Es fácil reiniciar un proceso bloqueado, pero se pierde la información que contenía. Normalmente, necesitamos almacenamiento de datos en memoria que no se pierda A MENOS QUE TODA la máquina virtual de erlang se apague (en cuyo caso, si necesita persistencia más allá de la RAM, necesitará tablas de DETS o Mnesia).

Los diccionarios de proceso generalmente se desalientan, pero aún así resultan extremadamente útiles. Sin embargo, personalmente, las tablas ETS me han salvado mucho. Se pueden transferir de un proceso de bloqueo al siguiente vivo. Se pueden descargar en el disco o cargar desde el disco y pueden manejar una gran cantidad de datos.

Simplemente estudie más sobre el almacenamiento de memoria IN utilizado en Erlang. Por cierto, también es posible usar almacenamiento fuera de la máquina virtual de erlang, como Memcached, Raik, CouchBase, etc. Sin embargo, en algunos casos, un juego se puede dividir en solo una estructura de datos como colas o listas o registros , una estructura de datos que puede ser guardado dentro del diccionario de proceso. Además, dependerá de cómo se presten los servicios del juego a los clientes. Si el juego usa HTTP (RESTFUL), también aprenderá qué bibliotecas de Erlang aplicar ( Mochiweb, Yaws , etc.). Simplemente sigue todo este tutorial , descubrirás todo.