码迷,mamicode.com
首页 > 系统相关 > 详细

简单Elixir游戏服设计-玩家进程跑起来

时间:2017-09-30 14:55:54      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:player   closed   res   简单   nbsp   cas   imp   unit   pen   

有了玩家模型,我们试试让玩家进程跑起来。

需要搞个PlayerSupervisor来负责启动和监控玩家进程。

技术分享
defmodule PlayerSupervisor do
    use Supervisor

    def start_link(_opts) do
        Supervisor.start_link(__MODULE__, :ok, name: __MODULE__)
      end

    def init(:ok) do
        Supervisor.init([PlayerServer], strategy: :simple_one_for_one)
    end

    def start_player(player) do
        Supervisor.start_child(__MODULE__, [player])        
    end
end
player_supervisor.ex

搞个PlayerServer来负责玩家进程。

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

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

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

plyaer_supervisor的测试代码

技术分享
defmodule PlayerSupervisorTest do
    use ExUnit.Case
    doctest PlayerSupervisor

    setup do
        start_supervised PlayerSupervisor
        %{}
    end

    test "测试PlayerSupervisor启动PlayerServer" do
        assert {:ok, _player_pid} = PlayerSupervisor.start_player(Player.init)
    end
end
player_supervisor_test.exs

下一章,我们将解决玩家进程注册的问题(现在玩家只能1个),如果只是单服的话可以用elixir 自带的Registry。

跨服的话用syn 或者gproc。

由于只是演示用(工作轻松点),所以我将用Registry。

同时game_server 是时候修改为应用启动了。

简单Elixir游戏服设计-玩家进程跑起来

标签:player   closed   res   简单   nbsp   cas   imp   unit   pen   

原文地址:http://www.cnblogs.com/rubyist/p/7614613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!