白话skynet第一篇
当你走过一个坐在自己店门前的杂货商面前。走过一个吸着烟斗的守门人面前,走过一个马车夫面前时,请你给我描绘一下这个杂货商、守门人和马车夫,他们的姿态,他们的外貌,要用画家那样的细节描绘出他们的精神本质,使我不至于把他们同任何别的杂货商人、任何别的守门人、任何别的马车夫混同起来,还请你只用一句话就让我知道马车夫有一匹马同其他的马是不一样的。 ——福楼拜指导莫泊桑
从今天开始,我给自己设定了几个小目标,其中之一是:每天都写上几千字或者半个小时。今天是开始码字的第一天,坐在电脑前想了好一会,从写什么开始?目的是什么?写什么不重要,目的是培养一下码字的习惯。我的本职是码代码的。就从我了解的东西开始写吧。今天姑且为大家介绍下:Skynet。
Skynet
Skynet是一个轻量级的游戏服务器框架。语言是C+LUA。挺干净的。作者是云风。社区也一直在维护。他想做的核心的一件事情就是,提供一个消息转发机制,用C+LUA实现一个actor模式的服务器。actor模式和消息转发机制的关系是这样的,actor模式是一种设计模式,在此之前实体是通过多线程的锁等机制实现读写数据,使用actor之后,各个实体之间的沟通改为消息传递。实体本身管理自己的行为和动作。不熟悉的可能不太理解。
下面介绍下Skynet的使用。
首先Git clone源码之后,在Linux环境下编译出Skynet。
其次,他的启动方式,不是用lua编译代码跑起来,而是用编译出的Skynet带一个配置文件跑一个文件。这是一个新人觉得怪异的地方。
再说代码的编写。如上所述,这里的实体就是一个一个的服务。服务之间通过Skynet框架的消息传递。所以我们的核心任何有2个:
1.如何启动一个服务。
启动服务。
require "skyenet"
skynet.start(function()
....
skynet.newservice("服务名")
end
)
这样算是启动了一个服务。
newservice填的服务名,他是会在config中找到对应的服务的文件,继续运行起来。
2.服务之间如何沟通。这个也是重点
2.1 首先服务需要想Skynet框架注册本服务。注册需要给什么呢?假设是你自己设计你会怎么做?每个服务需要有一个名字吧?
所以
1. 名字。作为标识。
2. 地址(相当于邮件地址,别人给你发消息的接收地址)
3. 接收消息的语种/类型(想象一下,别人寄给你一封信,可惜你都不知道这个是什么语言写的?中文英文你知道,你分得清楚,越南文和泰文吗?我们需要提前说清楚免得别人写信的内容写
4. 消息处理
错。)
1. 解码decode。别人的语言咱们不一定会使。咱得翻译一下。
2. 编码encode。
3. 来源。source。
分析处理socket的agent中的服务
1. 名字 , local watchdog = skynet.newservice("服务名") 这个服务名就是标识的名字
2. 地址 , watchdog 就是地址一个int
为什么名字和地址会在外面呢。这个也可以理解。名字和地址那是对外的。是别人用来区分和标识你的。你的名字和你家的地址当然是别人(你爸和村长)取的。
skynet.register (
name = "client" --类型名。 指示这个是客户端消息
id = skynet.PTYPE_TEXT -- 指示skynet 数据的类型。
unpack = ... -- 解码
pack = ... -- 编码方式
dispath = function (type,func)
)
... 就是
dispath 分发函数,为消息类型 type ,指定一个函数处理。
,function ( session , source , cmd ,...) -- 内部转发,session, 来源,指令 和 其他参数
end
说到这里。我们得提到通过发消息给一个服务,调用一个服务的服务了。
skynet.call ( address, type, cmd,... )
就是说,告诉address地址的服务,有一个type类型的消息,内部约定一般服务指定服务里面哪个函数(cmd),至于参数就在...里面自动填充了
然后我们看看服务内部收到了什么,session , source , cmd ,...
这里的session是指内部的一个session返回的时候调用者知道。
source是来源。
至于怎么返回,skynet.ret(skynet.pack(...))
明天继续分解这块:D
才一千三百字。
白话skynet第一篇的更多相关文章
- 白话skynet第二篇:skynet的通信调试pack和sprotol
今天来说说Skynet客户端和服务端网络通信的基础部分. Skynet当前版本.lua是skynet自带的5.3版本. 根据示例,我们可以知道.通信的步骤如下. 客户端按大小端打包成二进制. sock ...
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
- Python爬虫小白入门(四)PhatomJS+Selenium第一篇
一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...
- Three.js 第一篇:绘制一个静态的3D球体
第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...
- 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器
× 目录 [1]id选择器 [2]元素选择器 [3]类选择器[4]通配选择器[5]群组选择器[6]后代选择器[7]兄弟选择器 前面的话 选择器是jQuery的根基,在jQuery中,对事件处理.遍历D ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Android基础学习第一篇—Project目录结构
写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...
- 深入理解ajax系列第一篇——XHR对象
× 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...
- 深入理解javascript对象系列第一篇——初识对象
× 目录 [1]定义 [2]创建 [3]组成[4]引用[5]方法 前面的话 javascript中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...
随机推荐
- vuejs使用jsx语法
想要vuejs项目支持jsx语法,需要一些插件 babel-plugin-transform-vue-jsx Babel plugin for Vue 2.0 JSX 使用方法: 安装 npm ins ...
- 【转】win10哪个版本最好用,推荐win10企业版LTSC
https://msdn.itellyou.cn/ win10企业版LTSC又被称为win10企业版2019长期服务版本,这个版本小编认为是目前最好用的win10版本,在win10企业版2016长期服 ...
- Hbase合并Region的过程中出现永久RIT的解决
在合并Region的过程中出现永久RIT怎么办?笔者在生产环境中就遇到过这种情况,在批量合并Region的过程中,出现了永久MERGING_NEW的情况,虽然这种情况不会影响现有集群的正常的服务能力, ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...
- Python学习(四十一)—— Djago进阶
一.分页 Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views ...
- mysql性能监控软件pmm
具体配置操作步骤:1.在vmware或者virtualbox上安装centos镜像,可以选择阿里巴巴的镜像,下载速度快 centos7 修改yum源为阿里源,某下网络下速度比较快 首先是到yum源设置 ...
- linux 添加ssh和开启ssh服务apt管理的ubuntu
是在ubuntu下出现的需求 现笔记记录 apt-get update 更新源命令 apt-get install openssh-server 安装ssh服务 容易出现无法定位软件包.出现此问 ...
- css 文本设置
常用的应用文本的css样式: (1)color 设置文字和颜色,如:color:red; (2)font-size 设置文字的大小,如:font-size:20px; (3)font-family 设 ...
- day13_H5_CSS_2
一.css样式引用优先级,最高的是标签中写的样式,一标签为基准,有内而外,有下到上依次应用 2.样式隐藏,插入小知识,宽度可以写百分比(如:100%就是宽度两边占满) 3.加大加粗 4.水平垂直居中 ...
- svn没有权限报出的错