2016-10-19 7 views
0

私はアバターを割り当てようとしていますが、使用しようとするとエラーが発生します。Phoenixでメモリ内変数を保存するにはどうすればよいですか?

私はノードの背景から来ています。そこで、値を割り当てて要求から変更できます。状態を維持するにはどうすればいいですか?

defmodule Chatroom.LobbyChannel do 
    require Runner 
    use Phoenix.Channel 

    {:ok, pid: spawn(fn -> Runner.input() end)} 

    avatar = %{x: 0, y: 0} 

    def join("lobby", _payload, socket) do 
    {:ok, socket} 
    end 

    def handle_in("new_message", payload, socket) do 
    case payload["message"] do 
     "hello" -> broadcast! socket, "new_message", payload 
     "jump" -> send pid, {:jump, self, [avatar: avatar, socket: socket]} 
     _ -> nil 
    end 

    {:noreply, socket} 
    end 

    def handle_reply do 
    receive do 
     {:result, mover, socket} -> broadcast! socket, "new_message", [name: "State", message: "5"] 
    end 
    end 
end 

答えて

1

Agentと呼ばれるGenServerの上に抽象化は、あります。ドキュメントから:

エージェントは単純な抽象化状態です。

多くの場合、エリクシールでは、異なるプロセスまたは同じプロセスによって異なる時点でアクセスする必要がある状態を共有または保存する必要があります。

エージェントモジュールは、シンプルなAPIを使用して状態を取得および更新できる基本的なサーバー実装を提供します。

Agentは、フェニックス特有のものではなく、エリクシル全体です。エリクシルのガイドにはgreat how-to on the subjectがあります。

+0

ありがとうございます - 私のエージェントはどこから始めるのですか?関数を使用する前に、関数をリンクするためにstart_linkが使用されるようです。どこがフェニックススタックに入っていますか? – quantumpotato

+0

エージェントのライフサイクルによって異なります。いつでも利用できるようにする必要がある場合は、管理者として主アプリ内で起動してください。 – mudasobwa

関連する問題