2.1 下载、编译、运行
Skynet运行于Linux操作系统,读者可以购买阿里云、腾讯云服务器,或在自己的电脑上搭建虚拟系统。本书所有代码都在CentOS 7.7(一种Linux系统发行版本)64位版本下运行,所使用的Skynet版本是1.3.0,所记叙的操作也是基于该版本。如果读者使用其他版本,可能稍有不同,但差别不大。如果读者对Linux系统不甚熟悉,建议先看一些基础操作的资料。
说明:阿里云服务器一个月仅需十多元人民币,能满足学习之用;经过腾讯云的学生认证后,使用120元/年的学生套餐,也能满足学习之用。
2.1.1 下载和编译
登录服务器,按序输入如下的三条指令。
git clone https://github.com/cloudwu/skynet.git #下载Skynet源码 cd skynet #进入skynet目录 make linux #编译
如果读者使用的是纯净版的系统,需先安装git、gcc、autoconf等软件,否则会提示“-bash: git: command not found”这类错误。安装命令如下:
yum install git #git,用于下载Skynet源码 yum install gcc #用于编译源码 yum install autoconf #用于编译源码 yum install readline-devel #编译Lua会用到
执行指令“make linux”会自动下载第三方库“jemalloc”,然后执行编译。编译成功后,skynet目录下会多出一个名为“skynet”的可执行文件。运行Skynet,能看到如图2-3所示的需要一个配置文件的提示。
说明:本书会采用白色、灰色字体来强调程序的输出,白色字体表示相对重要的部分。在图2-3中,白色字体代表用户输入的内容,灰色字体代表程序输出。
图2-3 运行Skynet
说明:1)yum指令仅适用于CentOS系统,如果读者用的是Ubuntu,请使用apt-get。
2)由于GitHub是国外网站,如果执行git clone命令的速度偏慢,读者也可以登录https://github.com/cloudwu/skynet,点击“Clone or download”里的“Download ZIP”将源码打包下载,再手动上传到服务器。
3)建议安装一些常用软件,比如lrzsz、zip等。
2.1.2 运行范例
Skynet包含了不少范例,默认的“KV数据库”很有参考价值。如图2-4所示,KV数据库用于存储一些键值对,比如“hello=world”。当客户端发送“hello”时,服务端就会回应“world”。该范例使用了较复杂的实现方式,这里暂不探究它的内部结构(图上画了3个问号),仅看它是怎样运行的。
图2-4 KV数据库范例
要启动Skynet,需指定一份配置文件。“examples/config”是KV数据库的配置文件,输入如下指令可启动它:
./skynet examples/config #启动Skynet(KV数据库范例)
运行结果如图2-5所示,输出的内容显示Skynet依次启动了bootstrap、launcher、cmaster、simpledb、watchdog、gate等服务。图中左侧的“:0100000x”代表该条消息由哪个服务产生,可以看到,gate服务(地址为0100000f)监听了8888端口。由于输出较长,图中用“......”省略了部分语句。
图2-5 启动Skynet(KV数据库范例)
启动服务端后,接着启动客户端(对应图2-4里的手机)。Skynet也包含配套的客户端范例,位于“examples/client.lua”中(“.lua”代表它是个Lua程序),可以通过如下语句启动。
lua examples/client.lua #启动客户端
Skynet编译后,会包含Lua程序,此程序位于“3rd/lua/lua”中。如果服务器没有安装Lua,或者Lua版本小于5.3,可以用如下命令启动客户端。
./3rd/lua/lua examples/client.lua #启动客户端
如果“3rd/lua/lua”不存在,读者还可以进入“3rd/lua”,执行“make linux”指令,将Lua程序编译出来。
客户端的运行结果如图2-6所示,输入hello,会得到服务端的回应“result world”。
图2-6 KV数据库配套的客户端运行结果