1

N2O フレームフォークで外部プロセスからの情報を表示するにはどうすればよいですか?

次のようなコード:

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= <<>> },
      ...].

ページ2:

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

前もって感謝します。

4

2 に答える 2

1

ドキュメントでは、 wf:reg/1およびwf:flushの使用が推奨されています。ただし、これにはプロセスをプールに登録する必要があります。これは、複数のプロセスを一度に操作したい場合には便利ですが、それ以外の場合は非常に冗長です。

N2O の本で言及されているもう 1 つの興味深い関数はwf:flush/1です。その説明では、 wf:flush/0とはまったく異なることを行うと主張していますが、実際にはそうではありません。実際には、「バッファ」に配置された wf アクションを収集し、wf:send/2を介して登録済みのおそらく websocket プロセスに送信します。その間、websocket プロセスは時間指定された受信ループに入ります。

いくつかの N2O のコード検査の後、私の意見では、非常に単純な解決策があります。

  1. アクションをレンダリングできるプロセス (websocket プロセスなど) から開始し、目的の関数を生成して、親プロセス ID をパラメーターの 1 つとして渡します。

    async_render() ->
      Pid = self(),
      spawn(fun() -> update(Pid) end).
    
  2. 非同期関数でwfアクションを実行し、キューに入れられたアクションを取得し、バッファをクリアして、最後に のタプルを{flush, Actions}親プロセスに送信します。

    update(Pid) ->
      %% Your wf:insert..., update, etc. code here
      Actions = wf:actions(),
      wf:actions([]),
      Pid ! {flush, Actions}.
    

残りはN2Oがあなたのために行います:)

于 2016-10-30T21:31:10.340 に答える