如何保持每个浏览器窗口的过程的跟踪和在氮每个事件访问它?

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

  •  22-09-2019
  •  | 
  •  

在氮,Erlang的Web框架,我有以下问题。我有一个过程,需要发送和接收消息到作为轮毂的另一过程的照料。这个过程充当彗星过程以接收所述消息并更新页面。

的问题是,当用户处理的按钮我得到事件的呼叫。我如何得到阿霍德那的PID的事件。

的代码,发起通信,并设置在接收部看起来像这样,第一I有一个事件,其通过调用WF启动客户端处理:彗星:

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

的客户端进程的代码是下面,它获取并加入室在开始,然后进入一个循环发送和从室内接收信息到/:

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).

现在,这里的问题。我有另一个事件,send_message:

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

除了ClientPid是没有定义的,我看不出如何得到阿霍德它。任何想法?

在氮邮件列表的相关威胁: HTTP://基团。 google.com/group/nitrogenweb/browse_thread/thread/c6d9927467e2a51a

有帮助吗?

解决方案

氮提供了每称为state页面实例的键 - 值存储。从文档

检索指定的键下保存一个页状态值。页面状态不同于会话状态在该页面状态由一个用户范围限定为一系列请求到一个氮页:

wf:state(Key) -> Value

存储为当前用户页面状态变量。页面状态不同于会话状态在该页面状态由一个用户范围限定为一系列请求到一个氮页:

wf:state(Key, Value) -> ok

清除用户的页面状态:

wf:clear_state() -> ok

其他提示

具有会话ID的映射到客户端的Pid的一个ETS表。或者,如果氮提供任何类型的会话管理的,存储的PID的会话数据。

每一件事,要记住需要需要一个过程。它看起来像你的房间提供商是没有的。

室:加入(房间)需要被室:加入(间,自())。房间需要知道您的彗星进程的PID是什么。

要发送消息给一个客户,您首先发送邮件到房间,房间便会在房间里将消息发送到所有客户端。但是对于那些工作。每个客户端加入房需提交彗星PID。房间需要保持在房间里所有的PID的列表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top