相比于Linux系统,Mac
系统下安装skynet
显然要简单得多,打开Mac的终端
,大致步骤如下:
先检查本地是否已安装了git
工具,假如已经安装:
bogon:~ linshuhe$ git --version
git version 2.8.1
通过git
将skynet
源码克隆到本地:
bogon:project linshuhe$ git clone https://github.com/cloudwu/skynet.git
Cloning into 'skynet'...
remote: Counting objects: 8087, done.
remote: Total 8087 (delta 0), reused 0 (delta 0), pack-reused 8086
Receiving objects: 100% (8087/8087), 2.66 MiB | 31.00 KiB/s, done.
Resolving deltas: 100% (5463/5463), done.
Checking connectivity... done.
进入skynet根目录:
bogon:project linshuhe$ cd skynet/
bogon:skynet linshuhe$ ls
3rd Makefile lualib service test
HISTORY.md README.md lualib-src service-src
LICENSE examples platform.mk skynet-src
开始使用 make
指令编译源码,需要指定当前编译的操作系统为 "macosx"
:
bogon:skynet linshuhe$ make 'macosx'
/Applications/Xcode.app/Contents/Developer/usr/bin/make all PLAT=macosx SKYNET_LIBS="-lpthread -lm -ldl" SHARED="-fPIC -dynamiclib -Wl,-undefined,dynamic_lookup" EXPORT="" MALLOC_STATICLIB="" SKYNET_DEFINES="-DNOUSE_JEMALLOC"
cd 3rd/lua && /Applications/Xcode.app/Contents/Developer/usr/bin/make CC='cc -std=gnu99' macosx
/Applications/Xcode.app/Contents/Developer/usr/bin/make all SYSCFLAGS="-DLUA_USE_MACOSX" SYSLIBS="-lreadline" CC=cc
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lapi.o lapi.c
2017-04-15 17:46:23.097 xcodebuild[1399:22760] [MT] PluginLoading: Required plug-in compatibility UUID F41BD31E-2683-44B8-AE7F-5F09E919790E for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin' not present in DVTPlugInCompatibilityUUIDs
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lcode.o lcode.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lctype.o lctype.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o ldebug.o ldebug.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o ldo.o ldo.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o ldump.o ldump.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lfunc.o lfunc.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lgc.o lgc.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o llex.o llex.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lmem.o lmem.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lobject.o lobject.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lopcodes.o lopcodes.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lparser.o lparser.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lstate.o lstate.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lstring.o lstring.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o ltable.o ltable.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o ltm.o ltm.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lundump.o lundump.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lvm.o lvm.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lzio.o lzio.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lauxlib.o lauxlib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lbaselib.o lbaselib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lbitlib.o lbitlib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lcorolib.o lcorolib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o ldblib.o ldblib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o liolib.o liolib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lmathlib.o lmathlib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o loslib.o loslib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lstrlib.o lstrlib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o ltablib.o ltablib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lutf8lib.o lutf8lib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o loadlib.o loadlib.c
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o linit.o linit.c
ar rcu liblua.a lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o lmathlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o loadlib.o linit.o
ranlib liblua.a
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o lua.o lua.c
cc -o lua lua.o liblua.a -lm -lreadline
cc -O2 -Wall -Wextra -DLUA_USE_MACOSX -I../../skynet-src -c -o luac.o luac.c
cc -o luac luac.o liblua.a -lm -lreadline
cc -g -O2 -Wall -I3rd/lua -o skynet skynet-src/skynet_main.c skynet-src/skynet_handle.c skynet-src/skynet_module.c skynet-src/skynet_mq.c skynet-src/skynet_server.c skynet-src/skynet_start.c skynet-src/skynet_timer.c skynet-src/skynet_error.c skynet-src/skynet_harbor.c skynet-src/skynet_env.c skynet-src/skynet_monitor.c skynet-src/skynet_socket.c skynet-src/socket_server.c skynet-src/malloc_hook.c skynet-src/skynet_daemon.c skynet-src/skynet_log.c 3rd/lua/liblua.a -Iskynet-src -I3rd/jemalloc/include/jemalloc -lpthread -lm -ldl -DNOUSE_JEMALLOC
mkdir cservice
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup service-src/service_snlua.c -o cservice/snlua.so -Iskynet-src
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup service-src/service_logger.c -o cservice/logger.so -Iskynet-src
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup service-src/service_gate.c -o cservice/gate.so -Iskynet-src
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup service-src/service_harbor.c -o cservice/harbor.so -Iskynet-src
mkdir luaclib
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup lualib-src/lua-skynet.c lualib-src/lua-seri.c -o luaclib/skynet.so -Iskynet-src -Iservice-src -Ilualib-src
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup lualib-src/lua-socket.c -o luaclib/socketdriver.so -Iskynet-src -Iservice-src
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -Iskynet-src lualib-src/lua-bson.c -o luaclib/bson.so -Iskynet-src
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup lualib-src/lua-mongo.c -o luaclib/mongo.so -Iskynet-src
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -I3rd/lua-md5 3rd/lua-md5/md5.c 3rd/lua-md5/md5lib.c 3rd/lua-md5/compat-5.2.c -o luaclib/md5.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup lualib-src/lua-netpack.c -Iskynet-src -o luaclib/netpack.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup lualib-src/lua-clientsocket.c -o luaclib/clientsocket.so -lpthread
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -Iskynet-src lualib-src/lua-memory.c -o luaclib/memory.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup lualib-src/lua-profile.c -o luaclib/profile.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -Iskynet-src lualib-src/lua-multicast.c -o luaclib/multicast.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -Iskynet-src lualib-src/lua-cluster.c -o luaclib/cluster.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup lualib-src/lua-crypt.c lualib-src/lsha1.c -o luaclib/crypt.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -Iskynet-src lualib-src/lua-sharedata.c -o luaclib/sharedata.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -Iskynet-src lualib-src/lua-stm.c -o luaclib/stm.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -Ilualib-src/sproto lualib-src/sproto/sproto.c lualib-src/sproto/lsproto.c -o luaclib/sproto.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -I3rd/lpeg 3rd/lpeg/lpcap.c 3rd/lpeg/lpcode.c 3rd/lpeg/lpprint.c 3rd/lpeg/lptree.c 3rd/lpeg/lpvm.c -o luaclib/lpeg.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup lualib-src/lua-mysqlaux.c -o luaclib/mysqlaux.so
cc -g -O2 -Wall -I3rd/lua -fPIC -dynamiclib -Wl,-undefined,dynamic_lookup -Iskynet-src lualib-src/lua-debugchannel.c -o luaclib/debugchannel.so
编译成功后,使用指令查询skynet根目录,可以看到多出了一个可执行文件 skynet
表示编译成功:
bogon:skynet linshuhe$ ls
3rd README.md lualib service-src test
HISTORY.md cservice lualib-src skynet
LICENSE examples platform.mk skynet-src
Makefile luaclib service skynet.dSYM
运行服务器:
确保当前处于skynet的根目录下,运行以下指令:
bogon:skynet linshuhe$ ./skynet examples/config
[:01000001] LAUNCH logger
[:01000002] LAUNCH snlua bootstrap
[:01000003] LAUNCH snlua launcher
[:01000004] LAUNCH snlua cmaster
[:01000004] master listen socket 0.0.0.0:2013
[:01000005] LAUNCH snlua cslave
[:01000005] slave connect to master 127.0.0.1:2013
[:01000006] LAUNCH harbor 1 16777221
[:01000004] connect from 127.0.0.1:51132 4
[:01000004] Harbor 1 (fd=4) report 127.0.0.1:2526
[:01000005] Waiting for 0 harbors
[:01000005] Shakehand ready
[:01000007] LAUNCH snlua datacenterd
[:01000008] LAUNCH snlua service_mgr
[:01000009] LAUNCH snlua main
[:01000009] Server start
[:0100000a] LAUNCH snlua protoloader
[:0100000b] LAUNCH snlua console
[:0100000c] LAUNCH snlua debug_console 8000
[:0100000c] Start debug console at 127.0.0.1:8000
[:0100000d] LAUNCH snlua simpledb
[:0100000e] LAUNCH snlua watchdog
[:0100000f] LAUNCH snlua gate
[:0100000f] Listen on 0.0.0.0:8888
[:01000009] Watchdog listen on 8888
[:01000009] KILL self
[:01000002] KILL self
按键盘快捷键ctrl+c
停止服务器运行。
运行客户端:
保持服务端处于启动状态,新起一个终端,定位到当前项目根目录下,运行客户端测试脚本:
./3rd/lua/lua examples/client.lua
假如运行正确,在服务端的终端会输出接收到socket连接的日志:
[:0100000e] New client from : 127.0.0.1:51696
[:01000010] LAUNCH snlua agent
set hello world
并且此时客户端也会输出:
bogon:skynet linshuhe$ ./3rd/lua/lua examples/client.lua
Request: 1
Request: 2
RESPONSE 1
msg Welcome to skynet, I will send heartbeat every 5 sec.
RESPONSE 2
REQUEST heartbeat
REQUEST heartbeat
REQUEST heartbeat
REQUEST heartbeat
REQUEST heartbeat
有的网友还对skynet进行了适配,提供了skynet对Windows环境支持的版本:Windows版skynet