摘要:
所谓语法解析,就是将文本中符合既定规则的子串提取出来。欲解析,先要找出文本的既定规则;欲写出代码,先要将规则从抽象域转为自然语言的形式域,就像人们把数学概念用符号固化下来。这种符号,先辈们早已给出了方案,最常用的是BNF。lpeg便是自然地契合BNF的,这也是它与正则表达式等模式匹配库最大的不同,也 阅读全文
摘要:
在c/s结构的程序中,客户端自动更新是简化部署的一个常见需求.更新实际上做的操作是: 与服务器当前的文件做diff,找出所有变动的文件 下载变动的文件,替换掉本地的文件 从这两个操作来看,服务器起码要向客户端提供两个功能: 当前有那些文件 下载文件 其实第一个功能也可以转为下载文件,只要提供描述当前 阅读全文
摘要:
服务器程序,简单的说就是接收网络数据,处理后并返回结果数据。网络模块是其必不可少的部分,它本质上就是处理socket的五类事件:accept(客户端接入),connect(连接上服务器),read,write和error。socket接口有两种工作模式,一种是阻塞模式,一种是非阻塞模式。阻塞模式通常 阅读全文
摘要:
前面四篇已经涵盖了skynet的c层核心,剩下的timer,socket模块本身和actor模型没什么关系,且比较独立,最后再看吧。光用skynet的c接口,是很难在这上面写业务逻辑的,所以要找一种更爽快的方式来使用。官方推荐的是lua,利用lua的协程对skynet的消息分发做了封装,使得acto 阅读全文
摘要:
skynet是基于多线程的,每个actor都会被单独的线程调度,且每个actor可以杀死其它actor,给其它actor发送消息,创建actor,也就是一个actor可能被多个线程持有,那么就会面临三个问题: 框架使用的是handle映射与引用计数的手法,对外暴露sc(skynet_context) 阅读全文
摘要:
从四个方面来说: 1、消息发送 2、工作线程控制 3、信箱调度 4、消息分发 与调度相关的代码实现在/skynet-src/skynet_mq.c,/skynet-src/skynet_start.c,/skynet-src/skynet_server.c三个文件中,整体上是一个m:n的调度器。 消 阅读全文
摘要:
actor在skynet中称为模块,每个模块由皮囊和骨骼组成。皮囊承载用户逻辑,骨骼承载内部框架逻辑。 皮囊(skynet_module) 皮囊在框架中用skynet_module对象表示,实现在skynet-src/skynet_module.c中,代表一个动态库.下文用sm来称呼. 先来看看sm 阅读全文
摘要:
skynet是云风基于actor模型实现的一个服务器框架,核心七千多行c代码,并提供了一个lua binding。写得比较简明,用起来比较爽快,很合我的胃口,再加之决定在公司最近的一个项目上skynet,所以就决定精读一遍源码,将所思所想所得记录于此,以便用起来心安理得。 skynet的实现基于如下 阅读全文
摘要:
之前用的ubuntu,要么是装好的,要么是虚拟机里的,今天在公司亲自给一台新机器装了个ubuntu-server 16.04,在网络配置上遇到了问题,果然实践出真知啊。 事情是这样的,装好系统后,我的网络配置是这样的: /etc/network/interfaces auto eth0 iface 阅读全文
摘要:
在处理网络分包,包未收完整时,必定需要一个缓冲区来缓存数据,ring_buffer是最常用的选择。它是一个比较简单的数据结构,在学《数据结构》时想必大家都实现过,但我前几天就被它教育了一把,write时,一处分支漏了个等号,些许情况下会缓冲区溢出,导致堆栈一些数据被破坏,让我足足花了一整天才找到这个 阅读全文