私は2人の人がチャットするアプリを持っています。しかし、彼らはチャットする前に、両当事者は、フロントエンドに押しPhoenix:チャネル内のソケット間で状態共有を保存するにはどうすればいいですか?
を「受け入れる」する必要があり、私はこの関数を呼び出すボタンがあります。私の鳳凰チャンネルで
function acceptMatch() {
channel.push("accept_match", {
"matched_client_email": matchedClientEmail,
});
}
を私は(これを持っているので、I不完全です「)何をすべきか分からない:
def handle_in("accept_match", %{ "matched_client_email" => matched_client_email }, socket) do
Logger.info "accept_match"
...
############################### here ####################################
match_accepted = true # <-- I want to be able to find out if the other person has pressed "accept" as well
case match_accepted do
true ->
...
{:noreply, socket}
_ ->
{:noreply, socket}
end
end
私はAgent
に見えたが、それは私が簡単に別のソケットに周りに渡すことができないだろうPID、に結び付けているように見えます。私は/クエリに保存することができますすべての接続の間に共通のストレージ(データベース以外)を探しています。このようにしてパーティAが受け入れるならば、私はストレージに "パーティBが受け入れましたか?"と尋ねることができます。
=== UPDATE ===
私は名前のエージェントを使用してみたとき、私はこの取得:
iex(11)> myfunc = fn -> %{} end
#Function<20.52032458/0 in :erl_eval.expr/5>
iex(12)> Agent.start_link(myfunc, name: "Cool")
** (CaseClauseError) no case clause matching: {"Cool", []}
(elixir) lib/gen_server.ex:544: GenServer.do_start/4
iex(12)>
涼しい!私はそれをやろうとしたときにエラーが発生しました...エラーで私の質問を更新しました – Edmund
原子のときに動作するように見えます! 'name::cool' – Edmund
はい、申し訳ありません。私は自分の答えを更新しました。名前はhttps://hexdocs.pm/elixir/GenServer.html#module-name-registrationの要件を満たす必要があります – PatNowak