¿Cómo hacer un seguimiento de un proceso por ventana del navegador y acceder a él en cada evento en nitrógeno?

StackOverflow https://stackoverflow.com/questions/1994490

  •  22-09-2019
  •  | 
  •  

Pregunta

En nitrógeno, el framework de desarrollo web Erlang, tengo el siguiente problema. Tengo un proceso que se encarga de enviar y recibir mensajes a otro proceso que actúa como un concentrador. Este proceso actúa como el proceso de cometa para recibir los mensajes y actualizar la página.

El problema es que cuando el proceso de usuario un botón recibo una llamada al evento. ¿Cómo puedo ponerme en contacto con Pid que en un evento.

el código que inicia la comunicación y establece la parte receptora se parece a esto, primero tengo un evento que se inicia el proceso de cliente por llamar WF: cometa:

event(start_chat) -> 
  Client = wf:comet(fun() -> chat_client() end);

El código para el proceso de cliente es el siguiente, que se pone y se une a una habitación al principio y luego entra en un bucle de enviar y recibir mensajes a / de la sala:

chat_client() -> 
  Room = room_provider:get_room(), 
  room:join(Room), 
  chat_client(Room).

chat_client(Room) -> 
  receive
    {send_message, Message} ->
      room:send_message(Room, Message);
    {message, From, Message} -> 
      wf:insert_bottom(messages, [#p{}, #span { text=Message }]), 
      wf:comet_flush()
  end, 
  chat_client(Room).

Ahora, aquí está el problema. Tengo otro caso, send_message:

event(send_message) ->
  Message = wf:q(message),
  ClientPid ! {send_message, Message}.

excepto que clientPID no está definido allí, y no puede ver la forma de ponerme en contacto con ella. Algunas ideas?

La amenaza relacionada en la lista de correo de nitrógeno: http: // grupos. google.com/group/nitrogenweb/browse_thread/thread/c6d9927467e2a51a

¿Fue útil?

Solución

nitrógeno proporciona un almacenamiento de claves-valor por ejemplo página llamada state. Desde el documentación :

Recuperar un valor de estado página almacenada en la clave especificada. Página Estado es diferente de estado de sesión en la página de Estado que está en el ámbito de una serie de peticiones de un usuario a una página de Nitrógeno:

wf:state(Key) -> Value

Almacenamiento de una variable de estado de página para el usuario actual. Página Estado es diferente de estado de sesión en la página de Estado que está en el ámbito de una serie de peticiones de un usuario a una página de Nitrógeno:

wf:state(Key, Value) -> ok

Borrar estado de la página de un usuario:

wf:clear_state() -> ok

Otros consejos

Tener una mesa de ETS que los mapas de identificación de sesión de cliente de Pid. O si el nitrógeno proporciona ningún tipo de gestión de sesiones, almacenar el PID como datos de sesión.

Cada cosa que hay que recordar necesita un proceso. Parece que su proveedor de habitación no es.

habitación: join (habitaciones) necesidad de ser Sitio: join (habitación, auto ()). La necesidad de espacio para saber lo que su pid-proceso cometa es.

Para enviar un mensaje a un cliente que envíe primero el mensaje a la habitación, la habitación le enviará un mensaje a todos los clientes en la habitación. Pero para que eso funcione. Cada cliente de unirse a la necesidad de espacio para presentar el cometa-pid. La necesidad de espacio para mantener una lista de todos los PID de la habitación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top