一、前言
最近,我在搞服务端的skynet
框架,看看以后自己做些作品(skynet
框架服务端+Unity
客户端)。今天呢,我就先把skynet
环境搞一下,讲讲流程,也方便想学习的同学,话不多说,我们开始吧~
二、关于Skynet
skynet
是一个轻量级的网络游戏框架,也可用于许多其他领域。
建议大家看下云风的《[Skynet设计综述][Skynet 4]》,这里我不过多赘述,主要讲讲操作流程~
三、Ubuntu虚拟机
skynet
需要运行在linux
或macos
系统中,这里作为演示,我使用Ubuntu
虚拟机。下面我讲下Ubuntu
虚拟机的安装过程。
1、Ubuntu系统镜像下载
首先我们需要先下载Ubuntu
系统的iso
文件,下面这些地址都可以下载,大家选择一个即可:
网易开源镜像:[http://mirrors.163.com/ubuntu-releases/][http_mirrors.163.com_ubuntu-releases]
Ubuntu
官方:[http://releases.ubuntu.com/][http_releases.ubuntu.com]
Ubuntu
中国官网:[https://ubuntu.com/download/alternative-downloads][https_ubuntu.com_download_alternative-downloads]
中科开源镜像:[http://mirrors.ustc.edu.cn/ubuntu-releases/][http_mirrors.ustc.edu.cn_ubuntu-releases]
阿里开源镜像:[http://mirrors.aliyun.com/ubuntu-releases/][http_mirrors.aliyun.com_ubuntu-releases]
浙江大学开源镜像:[http://mirrors.zju.edu.cn/ubuntu-releases/][http_mirrors.zju.edu.cn_ubuntu-releases]
我以Ubuntu 16.04.7
版本为例,地址:[http://mirrors.163.com/ubuntu-releases/16.04.7/][http_mirrors.163.com_ubuntu-releases_16.04.7]
把iso
文件下载到本地,
2、VirtualBox虚拟机软件
有了iso
文件,需要将其安装到虚拟机中,而虚拟机需要运行在虚拟机软件上,所以,我们还需要先安装一个虚拟机软件。
虚拟机软件大家常用的是VMWare
,这里我强烈推荐另一款虚拟机软件:VirtualBox
,它轻量、开源免费,对于个人学习使用完全足够,五星推荐~
关于VirtualBox:
VirtualBox
是一款开源虚拟机软件。VirtualBox
是由德国Innotek
公司开发,由Sun Microsystems
公司出品的软件,使用Qt
编写,在Sun
被Oracle
收购后正式更名成Oracle VM VirtualBox
。
VirtualBox
号称是最强的免费虚拟机软件,它不仅具有丰富的特色,而且性能也很优异!它简单易用,可虚拟的系统包括Windows
(从Windows 3.1
到Windows 10
、Windows Server 2012
,所有的Windows
系统都支持)、Mac OS X
、Linux
、OpenBSD
、Solaris
、IBM OS2
甚至Android
等操作系统!使用者可以在VirtualBox
上安装并且运行上述的这些操作系统!
2.1、VirtualBox下载
VirtualBox
我们可以从官网下载到,地址:[https://www.virtualbox.org/][https_www.virtualbox.org]
选择windows
版本,点击下载,
下载完毕,
2.2、VirtualBox安装
双击安装包运行安装,过程没有什么特别的,这里不赘述~
安装成功后打开VirtualBox
,界面如下:
2.3、创建虚拟机
点击菜单控制/新建
,
填写虚拟机名称,设置虚拟机保存路径,如下,我设置为E:\ubuntu16
,
设置内存大小,建议分配2G
内存,
创建虚拟硬盘,
建议分配10G
的虚拟硬盘空间,
虚拟机创建完成,如下
3、载入Ubuntu iso镜像
点击启动虚拟机,会提示选择启动盘,点击下面的小按钮,
点击注册,
选择我们刚刚下载的iso
系统镜像文件,打开,可以看到列表中出现了我们的镜像,选中它,
点击启动,即可进入系统安装。
4、Ubuntu系统安装过程
点击Install Ubuntu
,
点击Continue
,
点击Install Now
,
此时会弹个提示框,点击Continue
,
时区填写China Time
,然后点击Continue
,
语言默认English
,点击Continue
,
接着输入账号密码,后面进入系统的时候要用到,这里提示我的密码弱(Weak password
),由于只是自己学习使用,密码弱也没什么关系,点击Continue
,
接着就是耐心等待它安装,
完成后,会提示需要重启,点击Restart Now
,
进入下面这个界面时,按一下回车键,
输入刚刚设置的密码,
顺利进入系统,
四、安装必要的工具
1、安装git
我们需要通过git
来下载skynet
,所以必须先安装git
,我们先打开终端,如下:
在终端输入下面的命令:(注意按回车后需要输入一次密码,并且密码不会显示出来,不要怀疑你的键盘)
sudo apt-get install git
如下:
安装完毕后,输入下面的命令检查下git
是否安装成功了,
git --version
如果输出了版本号,则说明git
已经安装成功了,
2、安装autoconf
编译skynet
需要用到autoconf
,在终端输入下面的命令来安装autoconf
,
sudo apt-get install autoconf
如下:
安装完毕后,输入autoconf --version
按回车,如果能输出版本号,则说明安装成功了,
3、安装gcc
编译skynet
需要用到gcc
,因为Ubuntu
默认安装了gcc
,所以我们这里就不用重复安装了,可以在终端中输入gcc --version
,如果能输出版本号,则说明已经安装了gcc
,
如果提示没有gcc
,则执行sudo apt-get install gcc
进行安装即可。
五、下载Skynet源码
在终端中执行下面的命令,
git clone https://gitee.com/mirrors/skynet.git
如下:
下载完毕后,我们打开文件夹浏览器,可以在Home
目录中看到多了一个skynet
文件夹,
进入skynet
文件夹,就可以看到框架源码啦,
六、编译Skynet源码
在终端中进入skynet
目录,
cd skynet
如下:
然后执行下面的命令:
make linux
此处你可能会报错,如下:
这是因为过程中去gitub
下载jemalloc
失败了,可以多试几次,编译成功后显示的输出内容如下:
我们可以在skynet
目录中看到生成了一个可执行文件:skynet
,如下:
七、运行Skynet案例
在终端中进入skynet
目录后,执行下面的命令,
./skynet example/config
如下,可以看到服务启动成功了,
接下来,我们开启一个新的终端,
运行一个客户端来测试一下,先cd skynet
进入目录,
然后执行如下命令:
./3rd/lua/lua example/client.lua
如下,每隔5秒就会给服务端发送一个heartbeat
心跳包,
我们可以输入hello
,服务器会回应一个world
,如下:
八、写个Demo
想要自己写个Demo
,得先知道skynet
是如何工作的。
1、配置文件
运行skynet
时,需要制定一个配置文件,例:
./skynet example/config
我们先看看这个config
文件里面是啥,进入examples
目录,打开config
文件,
config
文件内容如下:
include "config.path"
-- preload = "./examples/preload.lua" -- run preload.lua before every lua service run
thread = 8
logger = nil
logpath = "."
harbor = 1
address = "127.0.0.1:2526"
master = "127.0.0.1:2013"
start = "main" -- main script
bootstrap = "snlua bootstrap" -- The service for bootstrap
standalone = "0.0.0.0:2013"
-- snax_interface_g = "snax_g"
cpath = root.."cservice/?.so"
-- daemon = "./skynet.pid"
第一行引用了config.path
文件,我们打开config.path
文件,
内容如下:
root = "./"
luaservice = root.."service/?.lua;"..root.."test/?.lua;"..root.."examples/?.lua;"..root.."test/?/init.lua"
lualoader = root .. "lualib/loader.lua"
lua_path = root.."lualib/?.lua;"..root.."lualib/?/init.lua"
lua_cpath = root .. "luaclib/?.so"
snax = root.."examples/?.lua;"..root.."test/?.lua"
现在,我们把两个文件合在一起看,如下:
root = "./"
luaservice = root.."service/?.lua;"..root.."test/?.lua;"..root.."examples/?.lua;"..root.."test/?/init.lua"
lualoader = root .. "lualib/loader.lua"
lua_path = root.."lualib/?.lua;"..root.."lualib/?/init.lua"
lua_cpath = root .. "luaclib/?.so"
snax = root.."examples/?.lua;"..root.."test/?.lua"
-- preload = "./examples/preload.lua" -- run preload.l