zoukankan      html  css  js  c++  java
  • 简单Elixir游戏服设计-玩家进程跑起来

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

    需要搞个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 是时候修改为应用启动了。

  • 相关阅读:
    toggle
    Java 运算符
    Java 修饰符
    Java 变量类型
    java对象和类
    java基础笔记
    Java添加事件的几种方式(转载了codebrother的文章)
    mybatis中的#和$的区别?
    为什么java里面经常作List判断的时候,既要判断list不为null,又要判断size>0呢,岂不是多此一举吗?
    发送邮件功能 Service 层
  • 原文地址:https://www.cnblogs.com/rubyist/p/7614613.html
Copyright © 2011-2022 走看看