tutorial programacion imagenes erlang

programacion - erlang tutorial



Obtener PID para un proceso que se ejecuta en un nodo remoto (2)

Puede obtener un pid de "cluster wide" analizando ese pid en el nodo remoto:

En el nodo a :

(a@host)1> pid_to_list(self()). "<0.39.0>"

En el nodo b :

(b@host)1> Pid = rpc:call(''a@host'', erlang, list_to_pid, ["<0.39.0>"]). <7101.99.0> (b@host)2> Pid ! my_test. my_test

En el nodo a :

(a@host)2> flush(). Shell got my_test ok

Tenga en cuenta que el proceso puede no estar activo , por lo que llamar a erlang:monitor/2 antes de hablar con él puede ser una buena idea.

Soy nuevo en Erlang y estamos trabajando en un servidor de mensajería a pequeña escala.

Estamos tratando de crear un registro de procesos utilizando Redis (sin la intención de utilizar una vez grpoc, global, etc. debido a otras necesidades comerciales) como un almacén de datos (almacenar para guardar el ID de usuario en la asignación "nodo | PID"). Cuando un proceso comienza, se registra con Redis en la forma user_id (clave) y {nodo | pid} como valor. (pid es tored como una cadena en redis)

el valor de ejemplo insertado en redis es "user_abc", {one @ mf, "0.37.0>"}

Ahora cuando trato de encontrar PID para "user_abc" que se ejecuta en el clúster, obtengo {node y pid} como valor en un nodo remoto que en este caso es {one @ mf, "0.37.0>".

La pregunta es cómo usamos los detalles de {node, pid} en el nodo remoto para conectarnos al proceso user_abc.

Gracias de antemano por tu ayuda.


Si desea almacenar erlang pid en redis y desea que otro nodo lo lea como un pid remoto, use erlang:term_to_binary(Pid) para almacenar y use erlang:bianry_to_pid(PidBin) para leer.

Ver esta publicación: Erlang Pid