【转】从零开始学习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也能在阅读中发现些 ...
随机推荐
- Asp.net MVC 自定义错误页面以及return HttpNotFound遇到的问题
今天在处理mvc 项目404和500页面时,发现我以前比较喜欢用的Return HttpNotFound()没有跳转到我在webconfig中配置的自定义404页面,而且也不会去执行Global中的A ...
- WinCE下的串口通信开发(VS2005,VB.Net,VC++)
WinCE下的串口通信开发(VS2005,VB.Net,VC++) WinCE下的串口通信开发 一.利用Visual Basic 开发很简单,因为有现成的控件可以直接调用 以VS2005为例,首先 ...
- java web项目用cookie记住用户名、密码
1.jsp页面: <% String flag = (String)session.getAttribute("flag")==null?"":(Stri ...
- 暂存,本人博客有bug,正在全力修复。
当阳光洒满大地,当清晨的凝露如水滴滋润着世间万物,我就在这里.我在这里静静的看着这一切,这宁静的美好.耳边传来的英文歌曲.手里拿着的带着书香的书,时光倒流仿佛回到了多年前的清晨,那时的我每天读书背英语 ...
- angular动态绑定样式以及改变UI框架样式的方法
一:angular动态绑定样式 举个栗子: <tr *ngFor="let dataTr of tableData;let i = index" [formGroupName ...
- jar包导入本地maven库的操作
pom文件配置格式: <dependency> <groupId>A</groupId> <artifactId>B</artifactId> ...
- centOS上的基础文件操作
文件及文件夹的基础操作: 1: 新建 (1)在当前目录新建一个文件夹 dir foldername (2) 新建文件: 当前目录 vi newFile.text ...
- Redis(八):Redis的复制(Master/Slave)
Redis的复制(Master/Slave)目录导航: 是什么 能干嘛 怎么玩 复制原理 哨兵模式(sentinel) 复制的缺点 是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置 ...
- Opportunity Helper
using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; public class OpportunityHel ...
- python小白的初步爬虫
前序: 最近工作不是很忙,领导突然找我谈话,说是谈话,其实就是分配活呗.果不其然,很快进入正题, 给了我一个网址链接,然后说需要商品的信息...巴拉巴拉.好吧,去做吧. 我当时的内心是崩溃的,pyt ...