2018年4月9日

skynet源码分析之网络层——Lua层介绍

摘要: 本篇主要介绍在Lua服务里调用skynet网络层底层接口的流程,Lua层的api主要在lualib/skynet/socket.lua,可参考官方wiki https://github.com/cloudwu/skynet/wiki/Socket。 通过一个简单的例子说明Lua服务是如何最终调用到网 阅读全文

posted @ 2018-04-09 17:42 RainRill 阅读(2050) 评论(0) 推荐(1) 编辑

2018年4月2日

skynet源码分析之网络层——底层介绍

摘要: 本篇主要介绍skynet网络层底层,主要代码在socket_server.c,skynet_socket.c,socket_epoll.h。通过该篇的介绍,了解skynet网络层的运作原理,比如工作线程与socket线程如何通信,如何处理网络收发数据等。之后会介绍skynet的服务怎么跟网络层交互以 阅读全文

posted @ 2018-04-02 17:43 RainRill 阅读(1429) 评论(0) 推荐(2) 编辑

2018年3月6日

skynet源码分析之定时器skynet_timer.c

摘要: skynet自带定时器功能skynet-src/skynet_timer.c,在skynet启动时会创建一个线程专门跑定时器。每帧(0.0025秒/帧)调用skynet_updatetime() 1. 设计思想 skynet的设计思想参考Linux内核动态定时器的机制,参考Linux动态内核定时器介 阅读全文

posted @ 2018-03-06 20:02 RainRill 阅读(2713) 评论(0) 推荐(0) 编辑

2018年3月2日

skynet源码分析之lua层消息处理

摘要: Lua层消息处理机制在lualib/skynet.lua,提供大部分Lua层的api(最终会调用到c层的api),包括启动一个snlua服务时Lua层的处理,创建新服务,注册服务协议,如何发送消息,如何处理对方发过来的消息等。本篇主要介绍消息处理机制,从而理解skynet如何实现高并发。 为了简化, 阅读全文

posted @ 2018-03-02 17:42 RainRill 阅读(1398) 评论(0) 推荐(2) 编辑

skynet源码分析之snlua服务的启动流程(二)

摘要: 通过前一篇文章(http://www.cnblogs.com/RainRill/p/8485024.html)了解了skynet启动snlua服务的整体流程,这篇文章补充上一篇未介绍的内容。 1. 消息类型 skynet定义了多个不同的消息类型,每种类型的处理方式不一样,在服务启动流程中需注册用到的 阅读全文

posted @ 2018-03-02 17:28 RainRill 阅读(1353) 评论(0) 推荐(0) 编辑

skynet源码分析之snlua服务的启动流程(一)

摘要: skynet绝大部分服务类型是snlua,它是运行Lua脚本的服务,在用skynet框架上开发游戏服务器时,大部分逻辑都是snlua服务,90%以上只需写Lua代码即可,所以很有必要了解snlua服务相关内容。由于篇幅较多,打算分三篇文章介绍,都写完后再一起发布出去。本篇主要介绍snlua服务的启动 阅读全文

posted @ 2018-03-02 16:24 RainRill 阅读(3297) 评论(0) 推荐(1) 编辑

2018年2月1日

lua与c之间交互详解(二)

摘要: 本篇主要讲解下c如何调用Lua的,即c作为宿主语言,Lua为附加语言。c和Lua之间是通过Lua堆栈交互的,基本流程是:把元素入栈——从栈中弹出元素——处理——把结果入栈。关于Lua堆栈介绍以及Lua如何调用c参考其他两篇。 1. 加载运行Lua脚本 通过luaL_newstate()创建一个状态机 阅读全文

posted @ 2018-02-01 20:08 RainRill 阅读(2926) 评论(1) 推荐(2) 编辑

lua与c之间交互详解(三)

摘要: 本篇主要讲解Lua是如何调用c的,Lua是宿主语言,c是附加语言,关于c如何调用Lua参考其他两篇。Lua调用c有几种不同方式,这里只讲解最常用的一种:将c模块编译成so库,然后供Lua调用。 约定:c模块需提供luaopen_xxx接口,xxx与文件名必须一致,比如"mylib";还需提供一个注册 阅读全文

posted @ 2018-02-01 19:07 RainRill 阅读(2741) 评论(0) 推荐(0) 编辑

lua与c之间交互详解(一)

摘要: lua与c之间交互是通过“lua堆栈”通信的。不管是lua调用c还是c调用lua,都是通过操作lua堆栈实现的。顾名思义,lua堆栈也满足后进先出的特点,入栈/出栈都围绕栈顶进行的。与通用的栈不同的是,这个虚拟栈每个位置都对应一个索引,可以通过索引操作指定位置的数据。1代表栈底,向栈顶依次递增;-1 阅读全文

posted @ 2018-02-01 17:59 RainRill 阅读(9012) 评论(0) 推荐(2) 编辑

2018年1月20日

skynet源码分析之service_logger,skynet_error

摘要: service_srv目录是依附skynet核心模块的c服务模板,如用于日志输出的logger服务,用于运行lua脚本的snlua服务等,编译成so库供skynet框架使用。logger服务(service_logger.c)功能简单,通过了解其工作方式来熟悉skynet的工作流程。在skynet启 阅读全文

posted @ 2018-01-20 11:21 RainRill 阅读(923) 评论(0) 推荐(0) 编辑

导航