简单Elixir游戏服设计-玩家进程注册

日期:2019-11-26编辑作者:跳舞机游戏

简单Elixir游戏服设计-玩家进程注册。上回说用Registry 做本地注册(跨服可以用syn,只是稍微麻烦点,需要模拟global注册机制,写个封装模块)。

简单Elixir游戏服设计-玩家进程注册。修改game_简单Elixir游戏服设计-玩家进程注册。server 项目的mix.exs, 增加应用启动

  def application do
    [
      extra_applications: [:logger],
      mod: {GameServer, []}
    ]
  end

修改game_server.ex 实现,如下应用的监控树监管PlayerRegistry进程和PlayerSupervisor。这里可以考虑 :one_for_rest 选项,因为PlayerRegistry 挂了, 恐怕系统都玩不下去。

defmodule GameServer do
  use Application
  def start(_type, _args) do
    children = [
      {Registry, keys: :unique, name: PlayerRegistry},
      PlayerSupervisor
    ]
    Supervisor.start_link(children, strategy: :one_for_one)
  end
end

修改player_server.ex

图片 1图片 2

defmodule PlayerServer do
    use GenServer, restart: :temporary, start: {__MODULE__, :start_link, []}

    def start_link(player) do
        GenServer.start_link(__MODULE__, player, name: register_name(player))
      end

    def init(player) do
        {:ok, player}
    end

    def register_name(%{} = player), do: register_name(player |> Player.get_id)
    def register_name(id), do: {:via, Registry, {PlayerRegistry, id}}
end

player_server.ex

修改测试

图片 3图片 4

defmodule PlayerSupervisorTest do
    use ExUnit.Case
    doctest PlayerSupervisor

    setup do
        Application.stop(GameServer)
        Application.start(GameServer)
        %{}
    end

    test "测试PlayerSupervisor启动PlayerServer" do
        assert {:ok, p1} = PlayerSupervisor.start_player(Player.init |> Player.set_id(1))
        assert {:ok, p2} = PlayerSupervisor.start_player(Player.init |> Player.set_id(2))
        assert [{^p1, nil}] = Registry.lookup(PlayerRegistry, 1)
        assert [{^p2, nil}] = Registry.lookup(PlayerRegistry, 2)
    end

end

player_supervisor_test.exs

 

本文由新金沙国际手机版发布于跳舞机游戏,转载请注明出处:简单Elixir游戏服设计-玩家进程注册

关键词:

在午后

因为早就被锁住了啊。 午后的风吹进来,他开始怀念起那个陌生女人了。 知了鸣叫着,像是在招魂。他不应该去考虑...

详细>>

简单Elixir游戏服设计-使table测试通过

error_msg.ex  使用了点宏 简单Elixir游戏服设计-使table测试通过。(废了点时间,风流倜傥致在品尝抹初这段for,想一向...

详细>>

乱离,正义的谋杀(一)

唐浩马上派人调取所有案发现场录像,重点搜寻赵海的身影。虽然汪建明表示没有发现,但是他还是要再看一次。 “...

详细>>

夏天的雨

夏天的雨。夏天的雨。夏天的雨。夏天的雨。  一直在等一场大雨,像记忆中那种雨。 起风了,之前满眼的酷热,居...

详细>>