skynet quick

  • 操作系统:Window10安装Ubuntu
  • 开发工具 VSCode:安装EmmyLua插件,方便Lua代码编写与调试。

环境准备

$ su - root
$ apt install -y lua5.3
$ lua -v
Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio
$ apt install -y gcc
$ apt install -y g++
$ apt install -y make
$ apt install -y autoconf automake libtool
$ apt install -y git

下载源码

下载Skynet1.4源码,推荐Lua5.4。

$ git clone https://github.com/cloudwu/skynet.git
fatal: unable to access 'https://github.com/cloudwu/skynet.git/': OpenSSL SSL_read: Connection was reset, errno 10054
$ git config --global http.sslVerify "false"

关闭HTTPS的SSL验证

$ git clone https://github.com/cloudwu/skynet.git
$ cd skynet 

Skynet源码目录结构

目录 描述
3rd 第三方库,包括Lua虚拟机、jmalloc等。
lualib Lua封装的常用库,比如HTTP、MD5等。
lualib-src C语言实现的插件捆绑为Lua库,比如MySQL驱动、BSON、加密算法等。
service 使用Lua编写的Skynet服务模块
service-src 使用C语言编写的Skynet服务模块
skynet-src Skynet核心代码目录
test 使用Lua编写的测试代码
example 示例代码
Makefile 编译规则文件,用于编写。
platform.mk 编译与平台相关的配置

编译生成

在Ubuntu中编译生成Skynet程序

$ make linux
cd 3rd/jemalloc && ./autogen.sh --with-jemalloc-prefix=je_ --enable-prof
/bin/sh: 1: ./autogen.sh: not found
make[1]: *** [Makefile:44: 3rd/jemalloc/Makefile] Error 127
make[1]: Leaving directory '/mnt/d/skynet/project/sky'
make: *** [platform.mk:40: linux] Error 2

找不到autogen.sh脚本文件,Git下载的3rd/jemalloc/目录为空,没有任何文件。下载jemalloc源码放入其中。

$ git clone https://github.com/jemalloc/jemalloc.git

再次在sky目录下运行make linux编译生成Linux程序skynet到项目根目录下。

编译后会生成luaclibcservice目录,目录下均为*.so的系统动态库文件。

创建项目

规划项目目录结构

目录 描述
lib Skynet源码类库,Lua与C编写的核心扩展类库。
conf 配置文件目录
bin 可执行文件以及命令脚本存放位置
service 项目编写的服务存放位置
log 项目日志存放位置
$ mkdir sky && cd sky
$ mkdir lib
$ mkdir conf
$ mkdir bin
$ mkdir log
$ mkdir service

Skeynet核心文件为cserviceluacliblualibservice四个目录,创建项目后将编译后的Skynet的四个核心文件放到项目下的lib文件夹内,作为核心类库使用。

$ mv lualib lib
$ mv service lib
$ mv luaclib lib
$ mv cservice lib

在项目根目录下创建bin文件夹,将生成的skynet文件移动到bin目录下。

$ mkdir bin
$ mv skynet bin

配置文件

  • Skynet的配置文件在被读取时,会被当作Lua代码加载,并以key = value键值对形式为配置项赋值。
  • Skynet中用户自定义的配置会以字符串的形式保存在内部的env表中,可通过skynet.getenv获取配置。

Skynet的配置可分为必要配置、可选配置、环境配置、集群配置、用户配置。

必要配置 描述
cpath 设置C编写的服务模块位置路径
thread 设置启动的工作线程数量
bootstrap 设置初始启动的服务
start 设置启动的服务脚本

路径配置

添加路径配置文件

$ vim /conf/path

使用编译生成的skynet程序加载主配置文件,都会在项目根目录下完成。因此配置项目根目录时使用当前相对于项目根目录的相对路径作为项目根目录。

-- 路径配置文件

-- 项目根目录
root = "./"

-- C语言编写的Skynet核心库文件
lua_cpath = root.."lib/luaclib/?.so"
-- C语言编写的Skynet核心服务
cpath = root.."lib/cservice/?.so"

-- Lua语言编写的Skynet核心库
lua_path = root.."lib/lualib/?.lua;"..root.."lib/lualib/?/init.lua"
-- Lua编写的Skynet核心服务
luaservice = root.."lib/service/?.lua;"..root.."service/?.lua"

-- Lua编写的Skynet加载程序
lualoader = root.."lib/lualib/loader.lua"

注意:配置luaservice时需要将项目根目录下的service,也就是用户自定义服务编码的路径添加进入。后续在此目录下会加载项目的主入口文件main.lua

luaservice = root.."lib/service/?.lua;"..root.."service/?.lua"
路径 描述
root 项目根目录
lua_cpath C语言编写的Skynet核心库文件
cpath C语言编写的Skynet核心服务
lua_path Lua语言编写的Skynet核心库
luaservice Lua编写的Skynet核心服务
lualoader Lua编写的Skynet加载程序

主配置

添加主配置文件,主配置文件用于当使用skynet应用程序启动时需读取的配置。

$ vim conf/config
-- 主配置文件

-- 包含路径配置
include "path"

-- 工作线程数量
thread = 4

-- 启动节点数量
harbor = 0

-- 启动名为bootstrap的Lua服务,位于lib/service/bootstracp.lua。系统启动的第一个服务,默认为snlua bootstrap。
bootstrap = "snlua bootstrap"

-- 启动日志服务
logservice = "logger"
logger = nil
logpath = "."

-- 启动自定义的入口主脚本,位于service/main.lua。
start = "main"

-- 以后台守护进程方式启动Skynet,需配置logger。
-- daemon = "./daemon.pid"

日志配置

配置项 配置值 描述
logservice logger 设置日志服务
logger nil 设置Skynet内置skynet_error这个C语言API将日志输出的位置,nil表示输出到标准输出(屏幕),可指定文件路径输出到文件。
logpath . 日志保存的文件名

主入口脚本

  1. 根目录下创建自定义服务service文件夹
  2. 自定义服务文件夹下创建主入口main.lua文件
$ mkdir service && cd service
$ vim main.lua
local skynet = require "skynet"

skynet.start(function()
    skynet.error("skynet server start")
end)

启动程序

启动程序时需保证当前位置位于项目根目录下,使用bin/skynet应用程序加载conf/config主配置文件来执行主入口文件service/main.lua,查看屏幕打印信息。

$ cd sky
$ bin/skynet conf/config

查看自定义的错误信息是否打印

[:00000002] LAUNCH snlua bootstrap
[:00000003] LAUNCH snlua launcher
[:00000004] LAUNCH snlua cdummy
[:00000005] LAUNCH harbor 0 4
[:00000006] LAUNCH snlua datacenterd
[:00000007] LAUNCH snlua service_mgr
[:00000008] LAUNCH snlua main
[:00000008] skynet server start
[:00000002] KILL self

命令脚本

编写启动、关闭、重启脚本以快速执行程序

查看Skynet进程信息

$ vim bin/status.sh
#! /bin/bash

echo "runtime platform:" `uname`
echo `ps -ef|grep skynet|grep -v grep`
sleep 3

杀死进程关闭服务

$ vim bin/stop.sh
#! /bin/bash

echo "stop skeynet"

pids=`ps -ef|grep skynet|grep -v grep|awk '{print $2}'`
for pid in $pids
do
    echo "kill pid " $pid
    skill -9 $pid
done
echo "stop success"

sleep 3

启动服务

$ vim bin/start.sh
#! /bin/bash

echo "start skynet"

platform=`uname`
echo "skynet runtime platform: " ${platform}

if [ ${platform}x == 'Linux'x ]; then
    ./bin/skynet ./conf/config &
fi

echo `ps -ef|grep skynet|grep -v grep`

sleep 3
echo "start success"

重启服务

$ vim bin/restart.sh
#! /bin/bash

echo "restart skynet"
echo -e

echo "skynet status"
echo `ps -ef|grep skynet|grep -v grep`
echo -e

pids=`ps -ef|grep skynet|grep -v grep|awk '{print $2}'`
for pid in $pids
do
    echo "kill skynet pid " $pid
    skill -9 $pid
sleep 1
done
echo -e

echo "start skynet"

./bin/skynet ./conf/config &
sleep 1
echo -e

echo "skynet status"
echo `ps -ef|grep skynet|grep -v grep`
echo -e

sleep 1
echo "start success"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容