简单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 是时候修改为应用启动了。

时间: 2024-08-10 23:19:43

简单Elixir游戏服设计-玩家进程跑起来的相关文章

简单Elixir游戏服设计- 创建项目

反正是写到哪算哪. 创建umbrella项目 mix new simple_game --umbrella 创建model项目 cd simple_game\apps mix new model 创建 game_server 项目 同样在apps目录下 mix new game_server 最后项目结构如下 我尝试把它发布出去,结果 https://github.com/rubyist1982/simple.git 和我预期的不一样,我初始应该以项目做仓库好点.

Elixir游戏服设计三

玩家进程用gen_server来建模,我不直接使用 use GenServer, 而是使用exactor,该库可以去掉反锁的接口定义. 我们新建一个 player_server_manager app吧, 使用 mix new player_server_manager --sup, 会给我们增加sup.然后在mix.exs里增加exactor的依赖如下: defp deps do [{:exactor, "~> 2.2"}] end 跑 mix deps.get,成功了依赖就准

关于Elixir游戏服设计系列

写着写着就废球了,感觉空对空,实在没什么意思. 另外很快就要搞新项目,决定新项目就直接上elixir了.目前该做的准备工作已经探索了一些了. 以下的东西是写给同事参考的,感兴趣的可以看看,提建议更好. 游戏大体分为如下服务器 1. 网关服务器(必须) 2. 游戏服务器(必须) 3. 后台管理服务器(一般必须) 4. 数据存储服务器(必须) 5. 支付服务器(安桌或者第三方回调的话,必须) Elixir umbrella 项目目录结构可大概如下 1. 游戏数据模型(包括简单的获取更新逻辑) 2.

Elixir游戏服设计六

接上章,我新建了个app做包含Table模型, TableServer等.Table桌子的代码暂时如下, 有一些状态还没用上 defmodule Table do @state_accept 0 #准备接入玩家 @state_ready 1 #开局准备? defdelegate [fetch(t, key), get_and_update(t, key, list)], to: Map defstruct [:config, :seats, :state] def new(config) do

Elixir游戏服设计四

上章说到我们要引入syn https://github.com/ostinelli/syn/ 看过文档,它并没有直接提供{via, Module, Name} 相关的方法.我们需要封装一下. Name暂时可以用id,如果有需要再调整 以后有回调需求的话,刚好也可以做在那个模块里. 在player_server_manager项目里增加{:syn, "1.4.0"} 运行命令获取依赖 修改application 方法,增加依赖 def application do [applicatio

Erlang游戏服设计总结

这主要是一年多来,个人从事Erlang游戏服开发中对一些事情的思考. 想到哪说到哪,没有条理可言. 欢迎讨论. 通常Erlang游戏服务的设计涉及到的东东包括如下: 任务系统 活动系统 公会系统 玩法系统 好友系统 聊天系统 商城 转盘 以及其他 我经历过的项目不多,只有2个.在这2个项目中我看到系统建模都采用如下一锅端的方式: 即玩家进程加载了所有玩家数据,处理所有可能的系统: 整个游戏服通常只有玩家进程.公会进程.玩法进程以及一些公共进程. 整个游戏服里你看到的都是进程,看不到应用. 通常玩

简单Elixir游戏服务器-安装Elixir

用WebInstaller 安装半天也没下载成功文件. 改成直接下载erlang 和 elixir 预编译包了. 安装很简单,最后设置好环境变量. cmd 执行 elixir -v 最后顺便下载了个git hub windows 客户端,以前都是内网用git. 这回希望能写完这个简单系列,发布代码出去.

游戏开发经验谈(二):对战类全球服游戏的设计与实现

上篇文章<游戏开发经验谈(一):游戏架构里隐藏的五个坑及其应对方案>,我们主要讲解了游戏架构设计当中隐藏的一些坑及其应对方案,错过的小伙伴可以点击链接回溯之前的内容.本期内容,将会重点介绍对战类全球服游戏的设计思路与技术实现. 对战类游戏的设计思路 协议的选择 游戏设计之初,需要决定选择哪种协议来进行通讯.对于对战类游戏来说,首先推荐的肯定是UDP. 尽管UDP对开发基础有较高的要求,需要开发者自己实现传输成功检验.重传以及可靠性保证等,但相对于低开发成本的TCP,UDP在效率和时效性上都有极

游戏UI设计要点——你抓住玩家的心了吗?

游戏美术行情在线        游戏UI设计的好坏决定了你和玩家之间的关系,到底是初次相遇的美好呢还是"山无棱天地合乃敢与君绝"?       那么要做一名具有出色"撩妹"技巧的UI设计师,就要抓住游戏UI设计的要点,这样才能抓住玩家的心嘛!今天就跟大家聊聊游戏UI的撩妹哦不设计要点. 话说"士为知己者死,女为悦己者容",那么如何才能成功地引起对方的注意呢?这就必须有个互动的过程啦,这个过程通俗点说的呢就是"撩妹".