Erlang 在网页上显示n2o框架中外部进程的信息

Erlang 在网页上显示n2o框架中外部进程的信息,erlang,n2o,Erlang,N2o,如何在N2O framefork中显示来自外部进程的信息 代码如下: tokyoWeather() -> timer:sleep(10000), Data = getTokyoWeater(), ??? SHOW_ON_PAGES, tokyoWeather(). lisbonWeather() -> timer:sleep(10000), Data = getLisbonWeater(), ??? SHOW_ON

如何在N2O framefork中显示来自外部进程的信息

代码如下:

tokyoWeather() ->
     timer:sleep(10000),
     Data = getTokyoWeater(),
     ??? SHOW_ON_PAGES,
     tokyoWeather().
lisbonWeather() ->
     timer:sleep(10000),
     Data = getLisbonWeater(),
     ??? SHOW_ON_PAGES,
     lisbonWeather().
第1页:

body() ->
    [ #panel { id=TokyoWeather text= <<>> },
      #panel { id=LisbonWeather, text= <<>> },
      ...].
body()->
[#面板{id=TokyoWeather text=},
#面板{id=LisbonWeather,text=},
...].
第2页:

body() ->
    [ #panel { id=TokyoWeather text= <<>> },
      #panel { id=LisbonWeather, text= <<>> },
      ...].
body()->
[#面板{id=TokyoWeather text=},
#面板{id=LisbonWeather,text=},
...].

提前感谢。

使用wf:regwf:flush功能。例如:

  • 为页面进程注册唯一名称:

    23:
    事件(初始)->wf:reg(房间)…

  • 正在更新DOM:

    60:wf:insert\u底部(历史记录、条款)

  • 使用页面进程名称刷新对浏览器的更改:

    62:
    wf:flush(房间)


  • 文档建议使用wf:reg/1和wf:flush。然而,这要求您将进程注册到一个池中,当您想要一次操作多个进程时,这非常方便,但在其他方面则非常冗余

    N2O书中提到的另一个有趣的功能是wf:flush/1
    。它的描述声称它做了与wf:flush/0完全不同的事情,而实际上它没有。它实际上只是收集放置在“缓冲区”中的wf操作,并通过wf:send/2将它们发送到注册的假定websocket进程。同时,websocket进程位于一个定时的接收循环中

    经过N2O的代码检查,我认为有一个非常简单的解决方案:

  • 从可以呈现操作的进程(例如websocket进程)开始,生成所需的函数并将父进程id作为其参数之一传递

    async_render() ->
      Pid = self(),
      spawn(fun() -> update(Pid) end).
    
  • 在now asynchronous函数中执行wf操作,然后检索排队的操作,清除缓冲区,最后将
    {flush,actions}
    的元组发送到父进程

    update(Pid) ->
      %% Your wf:insert..., update, etc. code here
      Actions = wf:actions(),
      wf:actions([]),
      Pid ! {flush, Actions}.
    
  • 其余由N2O为您完成:)