【转】从零开始学习Skynet_examples研究
转自 http://blog.csdn.net/mr_virus/article/details/52330193
一、编译Skynet:
1、用ubuntu15.10直接
make linux
编译Skynet会有报错。安装autoconf、libreadline6、libreadline6-dev后就能编译成功了。
sudo apt-get install autoconf sudo apt-get install libreadline6 libreadline6-dev
二、关于examples相关的代码分析:
1、关于examples/config里面有一行:
start = "main" -- main script
意思是通过start="main"开启第一个Skynet的服务main.lua。这个文件main.lua也在examples文件夹中:
第一行先引用skynet这个库,这个库是用lua写的,即是lualib/skynet.lua。里面定义了这些接口:
1).skynet.start()用于服务的入口,加载lua服务时先运行这里的代码,它调用了luaclib-src/lua_skynet.c里面的callback(),最终调用skynet的框架skynet_callback()来设置毁掉函数。
2).skynet.newservice()用于启动一个lua写的服务,省略掉.lua后缀名。它调用了skynet.call()然后skynet.call()调用luaclib-src/lua_skynet.c里面send(),最终调用skynet的框架skynet_send()压入队列。
3).skynet.call()用于发送一条消息给Skynet的框架。消息会压入队列,等待SKynet框架的调度。
4).skynet.exit()移除服务,通过skynet.send()发送一条消息给skynet框架来移除lua的这个服务。
5).skynet.monitor()用于监视服务,看它是否关闭。
main.lua共打开了四个服务:
1).service_mgr:这个是系统的模块,用于管理服务。
2).console:这个是系统的模块,用于管理输出。
3).simpledb:这个是例子模块,用于管理Key-Value数据。
4).watchdog:这个是例子模块,用于监视socket端口,等待数据。
main.lua没有调用其他函数,加载完服务,它也就完成了任务,所以它最后调用了skynet.exit()把自己杀掉。
现在Skynet已经启动了watchdog服务,监听着8888端口,等待客户端的连接。
下面是watchdog服务的skynet_start()开始函数:
skynet.dispatch()这个服务的回调函数,通过SOCKET[]来调用函数,这些函数有:
SOCKET.open():打开agent服务并启动,使用gate来管理socket。
SOCKET.close():关闭agent服务。
SOCKET.error():打印错误信息。
SOCKET.data():有数据到来。
下面是agent服务代码:
function CMD.start(conf)
local fd = conf.client
local gate = conf.gate
WATCHDOG = conf.watchdog
-- slot 1,2 set at main.lua
host = sprotoloader.load(1):host "package"
send_request = host:attach(sprotoloader.load(2))
skynet.fork(function()
while true do
send_package(send_request "heartbeat")
skynet.sleep(500)
end
end) client_fd = fd
skynet.call(gate,"lua","forward",fd)
end
前面watchdog调用SOCK.open()的时候就调用了这里的CMD.start(),在客户端输出了"Welcome to skynet"。
Agent的核心就是注册了协议,并根据协议把数据发送给simpledb服务去处理。
协议的详细部分看lualib/skynet.lua。
最后看看simpledb服务:
这里很简单地处理了SET和GET。
以上只是大概浏览了一遍Skynet附带的例子,了解了一些Skynet提供的lua接口,其他接口可以查看skynet.lua代码。
【转】从零开始学习Skynet_examples研究的更多相关文章
- 从零开始学习jQuery(转)
本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...
- 从零开始学习jQuery (一) 开天辟地入门篇
一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章是入门第一篇, 主要是简单介绍jQuer ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
- 从零开始学习jQuery (五) 事件与事件对象
本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...
- 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式
本系列文章导航 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得 ...
- 从零开始学习jQuery (三) 管理jQuery包装集
本系列文章导航 从零开始学习jQuery (三) 管理jQuery包装集 一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着 ...
- 学习和研究下unity3d的四元数 Quaternion
学习和研究下unity3d的四元数 Quaternion 今天准备学习和研究下unity3d的四元数 Quaternion 四元数在电脑图形学中用于表示物体的旋转,在unity中由x,y,z,w 表示 ...
- 从零开始学习jQuery (二) 万能的选择器
本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...
- 从零开始学习jQuery (一) 入门篇
本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些 ...
随机推荐
- HDU 1885 Key Task (带门和钥匙的迷宫搜索 bfs+二进制压缩)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Time Limit: 3000/1000 MS (Java/Others) ...
- css代码添加背景图片常用代码
css代码添加背景图片常用代码 1 背景颜色 { font-size: 16px; content: ""; display: block; width: 700px; heigh ...
- Hbuilder连接安卓模拟器,调试app
本人用的是夜神模拟器,所以下面的命令也是基于夜神的,其他模拟器请自行百度. 1.首先,启动HBuilder和夜神模拟器 然后打开cmd命令提示符 cd进入夜神模拟器bin目录 执行以下命令 nox_a ...
- Crash for small compressed texture on some Android device
I created a full white texture with 4x4 size. Unity requires that compressed texture size should be ...
- OC - 时间日期类NSDate
OC - 时间日期类NSDate //NSDate 时间日期类 NSDate 二进制数据流 { //1.获取当前时间 零时区的时间 //显示的是格林尼治的时间: 年-月-日 时:分:秒:+时区 NSD ...
- Zabbix——使用邮件报警
前提条件: 1. Zabbix版本4.0 zabbix-server 命令配置: yum install mailx -y #下载邮件功能 vi /etc/mail.rc set bsdcompat ...
- HTML5之特效
2D转换 在二维的平面上做一些变化,使用transform属性 1. 2D转换之移动(translate) 案例: div{ width: 200px; height: 200px; backgrou ...
- mysql如何配置sql记录
原文链接:http://www.qqdeveloper.com/detail/11/1.html 为什么要记录sql记录 主要目的是为了检测我们的网站安全问题,有效的避免一些sql注入或者是xss攻击 ...
- 微信小程序 唯一标识 加减
var nums = 'goods_list[' + e.currentTarget.dataset.indexs+'].goods_num' //console.log(nuns) var num ...
- JavaScript&jQuery 基本使用
* 最近连续加班加点三周* 遭不住了 ...* 来点 js / jq 的货* 一个人撸PHP 撸HTML 撸CSS 撸JavaScript 撸jQuery* 不管有没有用记录一下** 1:jQuery ...