skynet .0.8.1阅读笔记

最近几天又看了下skynet,C核心部分的实现代码变化很小,主要是还没有完全理解lua部分。其实看skynet不必太纠结与C部分,看lua部分就可以了,理解skynet所做的事情,好好阅读wiki。

skynet-src

malloc_hook.c .h skynet C部分使用malloc free realloc calloc 内存分配的hook,默认使用jemalloc内存池,方便做内存分配统计等。

rwlock.h 使用原子操作封装的读写锁

skynet.h skynet核心api以及内部的消息类型

skynet_daemon.c .h skynet作为守护进程运行,pid会写入到文件中并且不会重复启动skynet进程同台机器。

skynet_env.c .h skynet和lua的交互设置lua_newstate 保存了skynet配置等都保存在lua_State中,skynet_env数据结构就是一个lua_State。

skynet_error.c skynet_error()函数,用于skynet错误日志的记录。

skynet_handle.c .c skynet服务的管理,服务器的name和handle_id构成一个handle,存储handle与skynet_context的对应关系,是一个哈希表每个服务skynet_context都对应一个不重复的handle通过handle便可获取skynet_context保存了 handle 和 skynet_context的对应代码注释

skynet_harbor.c/.h  harbor 用来与远程主机通信 master 统一来管理skynet的设计综述讲述了 session和 type的作用主要用于skynet集群 harbor已服务器的形式加载,符合skynet服务的接口。

skynet_imp.h   skynet的配置数据结构

skynet_log.c/.h skynet日志的输出函数

skynet_main.c skynet main()函数 启动部分,涉及了配置文件的加载和与lua栈交互的代码等。配置文件的wiki

skynet_malloc.h skynet内部使用的内存分配函数

skynet_module.c/.h  *.so模块既服务的加载

skynet_monitor.c/.h skynet内部的驱动模块,比如有消息了唤醒线程来处理。

skynet_mq.c/.h skynet的二级消息队列

skynet_server.c/.h  skynet 主要功能 加载服务和通知服务一个模块(.so)加载到skynet框架中,创建出来的一个实例就是一个服务,为每个服务分配一个skynet_context结构 每一个服务对应的 skynet_ctx 结构各个服务间消息分发的核心实现

skynet_socket.c/.h 网络部分处理网络消息

skynet_start.c skynet启动部分的初始化,包括创建线程等。创建了logger服务以及bootstrap服务(boostrap服务用于后面加载lua的服务)。

skynet_timer.c/.h skynet定时器的实现,linux内核分级链表的实现。

socket_epoll.h socket_kqueue.h socket_poll.h socket_server.h/.c 网络部分的实现 不支持windows

service-src

databuffer.h     数据缓存池数据结构

hashid.h         hashid池

service_gate.c   gate负责skynet和客户端的连接,维护连接池等。

service_harbor.c harbor负责skynet节点间的通信。

service_logger.c logger服务写日志到文件或者stdout。

service_snlua.c  lua服务的加载

lualib-src(lua库的C实现,既C语言实现的lua库。建议先阅读lua的C交互接口就可以理解这部分代码了。)

sproto/ sproto通信协议相关的代码,暂且不看。看上去挺简单的后面可以再看看。

lsha1.c sha1加密算法的实现

lua-bson.c lua bson协议的算法实现

lua-clientsocket.c lua 客户端socket的实现

lua-cluster.c   (require "cluster_core")       集群打包解包的实现 格式如下:

1
2
3
4
5
6
7
8
uint32_t/string addr
uint32_t/session session
lightuserdata msg
uint32_t sz
    
return
      string request
      uint32_t next_session

lua-crypt.c hmac sha1 base64等加密算法的实现。

lua-memory.c       skynet内存的使用情况,C实现供lua调用。

lua-mongo.c        mongodb的lua驱动

lua-multicast.c   multicast的实现

lua-netpack.c      网络打包部分的实现,这里有一个消息的发送队列和未完成消息的队列。

lua-profile.c      没看懂这个

lua-seri.c/.h      lua打包 解包函数的封装里面包含了读写缓冲区。

lua-sharedata.c    用于skynet同一进程内共享数据。wiki

lua-skynet.c       skynet.core lib的实现。

lua-socket.c       lua socket接口的封装

lua-stm.c          stm模块用于同一进程内不同服务间的数据共享。

lua-mysqlaux.c     mysql驱动的辅助

Makefile

service-src和lualib-src目录下面的文件会编译成对应的.so文件,作为skynet解析C服务和lua调用C实现的lib。

lualib(这个文件夹下主要是skynet lua层的实现, 调用了C层实现的lib(*.so))。

http/       http协议的实现模块

sharedata/  共享数据模块的实现

skynet/

snax/      用于加载lua服务 wiki

service/ (lua服务没怎么看懂改天接着看。再看看skynet wiki和forthxu写的talkbox案列基本就懂了。。)

你可能感兴趣的:(skynet .0.8.1阅读笔记)