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