16 心中那自由的世界

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 16w+

skynet教程(2)--项目代码独立于skynet源码结构

作者:shihuaping0918@163.com,转载请注明作者目前大部人使用skynet进行开发的时候,都是直接在skynet的源码目录下直接开发的。这样有一个不好的地方就是,自己的代码和skynet本身的代码混在一起,项目交接或者是有新成员加入的时候,比较容易迷惑,到底哪些文件才是我要关注的。如果不是对skynet进行二次开发,对skynet进行扩展。仅仅是使用它,完全是可以项目独立于skyn

2017-09-02 09:06:20

skynet教程(1)--服务的编写

作者:shihuaping0918@163.com,转载请注明作者自从skynet源码分析系列文章发布以后,陆续收到不少的反馈,说需要一个step by step的教程,身边的朋友也要求出个教程。于是就写了这个教程。每个教程都是从hello world开始的,所以先写一个echo服务作为hello world版本。echo服务先放在skynet/example这个目录下,因为配置相关的东西还没有讲

2017-09-02 08:20:29

skynet教程(0)--skynet的获取和编译

作者:shihuaping0918@163.com,转载请注明作者本篇作为skynet的开篇,主要是介绍skynet基本环境的搭建以及知识储备。怎么获取skynet的源码,怎么编译。目前的skynet版本是1.1,是云风最近一次发布的。本篇只涉及linux下的环境搭建,不介绍windows下的相关内容,windows下要搭建请自行google。机器环境准备:linux/mac一台。git客户端安装好

2017-09-02 08:19:28

pomelo源码分析(8)--session

作者:shihuaping0918@163.com,转载请注明作者pomelo中有session/frontendSession/backendSession/sessionService。名字看起来都有点像,这一篇准备讲session和sessionService。session是对用户连接的一个抽象,它会调用sessionService。sessionService是session的具体实现底层

2017-08-27 19:45:47

pomelo源码分析(7)--connector与其它组件交互

作者:shihuaping0918@163.com,转载请注明作者connector是一个重量级组件,它依赖connection/server/pushScheduler/session组件。 对session组件的依赖是对连接创建一个session。 对connection的依赖是连接数的增加减少,以及登录用户uid的管理。 对pushScheduler的依赖是,当异步发送时,把发送任务放到

2017-08-27 19:44:37

pomelo源码分析(6)--connector协议处理message

作者:shihuaping0918@163.com,转载请注明作者pomelo框架核心提供了sioconnector,udpconnector,hybirdconnector,mqttconnector。sioconnector基于socket.io,使用json通信,pc端通信。hybirdconnector基于tcp和websocket,使用二进制通信,主要用于手机端通信。mqttconnect

2017-08-26 22:38:20

pomelo源码分析(5)--node.js中的this

作者:shihuaping0918@163.com,转载请注明作者在继续分析代码之前,需要先讲一下node.js中的this是什么。因为不讲这个的话,后面的内容进行不下去。在以前版本的node.js中,全局this是个空对象,在node8的repl中,全局this和global是相等的。> this === globaltrue> 但是,如果使用node8执行js文件,全局this是个空对象。c

2017-08-26 22:36:30

pomelo源码分析(4)--connector之网络监听

作者:shihuaping0918@163.com,转载请注明作者pomelo的connector负责接收外部连接,同时做协议的编码解码,接收的时候做解码,发送的时候做编码。如果有对消息进行加密的话,也是在这里进行处理。有unicode的话,还要转码成utf8。connector的网络处理是基于事件的,这也符合node.js的设计。connector是一个component,根据pomelo的约定,

2017-08-26 15:52:22

pomelo源码分析(3)--配置设置和读取及app.load

作者:shihuaping0918@163.com,转载请注明作者以https://github.com/NetEase/chatofpomelo/tree/master/game-server服务器为例子来说明配置读取是怎么完成的,chatofpomelo是pomelo做为聊天服务器的例子。它的入口点是app.js。代码内容如下:var pomelo = require('pomelo');va

2017-08-26 13:05:57

skynet源码分析(11)--skynet的配置加载

作者:shihuaping0918@163.com,转载请注明作者skynet中的源码已经分析得差不多了,还有启动过程没有分析。skynet的配置文件是以lua格式来写的。使用过skynet的都清楚skynet的启动命令是skynet config_file_name。配置文件名是作为命令行参数传给skynet进程的。skynet进程启动以后,会读取config文件,然后解析这个lua文件。然后把相

2017-08-22 21:08:14

skynet源码分析(10)--消息机制之消息注册和回调

作者:shihuaping0918@163.com,转载请注明作者在第5篇和第6篇已经分析过消息的发送和消息的处理,但是没有谈到消息回调函数的注册,还有消息回调的详细过程。第9篇已经讲了一部分消息的回调处理。skynet中的回调对C服务和对LUA服务的注册机制是不同的,C服务的回调可以直接挂载。但是lua服务不行,它必须经过一次中转。这个在第9篇中谈到过,但是第9篇主要是介绍lua c api的协议

2017-08-21 21:23:53

skynet源码分析(9)--LUA C API

作者:shihuaping0918@163.com,转载请注明作者这篇文章是分析skynet消息注册前的知识准备,skynet的消息注册,C服务和lua服务设置回调走的函数是不同的。C的回调可以直接调,但是lua的回调不行,它需要一个默认的回调C函数,将返回参数转换为lua能理解的格式,遵循lua的api协议,传递到lua层。这个回调的名字叫_cb。具体它是怎么工作的我们下一篇再分析,这一篇要先了解

2017-08-21 18:58:11

skynet源码分析(8)--skynet的网络

作者:shihuaping0918@163.com,转载请注明作者 网络部分是一个服务器最基础最核心的部分,这个技术也已经是非常成熟了,现在已经很少有人自己实现一个网络相关的库了。skynet的网络库是自己实现的。网络底层的技术在windows上是完成端口(IOCP),在linux上是EPOLL,在mac/freebsd上是kqueue。这些技术都是能够承载高负载高并发网络请求的。IOCP和EPO

2017-08-21 12:56:56

skynet源码分析(7)--skynet中的timer

skynet的timer是做游戏用得比较频繁的一个功能,分析一下它的源码还是有意义的。而且核心的C源码除了timer和网络以外,已经基本分析得差不多了。其它都是跟lua c api相关,或者是跟lua交互比较多的。timer的源码在skynet-timer.c和skynet-timer.h中。在开始看代码之前,请大家默念三遍:1秒=1000毫秒1毫秒=1000微秒1微秒=1000纳秒然后

2017-08-21 10:41:50

skynet源码分析(6)--消息机制之消息分发

作者:shihuaping0918@163.com,转载请注明作者第5篇讲到了消息的处理,消息的处理实际上就是对工作队列里的消息不停地调回调函数。那么消息是怎么放进消息队列的呢。带着这个疑问,让我们从lua层开始追根溯源。在lua层有两个api,一个是skynet.send,这个是非阻塞发消息。另一个是skynet.call,这个是阻塞式发完消息等回应。skynet.call使用一个sessi

2017-08-21 10:41:47

skynet源码分析(5)--消息机制之消息处理

作者:shihuaping0918@163.com,转载请注明作者skynet的消息机制准备拆成三个部分来讲,第一部分是接收处理,第二部分是分发,第三部分是消息注册。顺序是倒过来的讲的,我觉得这样更容易被人接受理解。顺过来讲会有一个问题就是,讲到a时,可能牵扯到b.c.d,而b.c.d可能又牵扯到c.d.e,不讲呢又会留下疑惑,讲的话呢又很容易陷入细节的泥潭。干脆就倒过来讲好了。skynet是

2017-08-21 10:41:44

skynet源码分析(4)--monitor

作者:shihuaping0918@163.com,转载请注明作者skynet对服务的监控做得比较简陋,从设计原则上来说,这样做也是对的,因为框架层能做的,基本就是上报和打日志,上层的业务是变化万千的,不论怎么写,都可能满足不了上层的业务需求。skynet中对服务的监控实现在skynet_monitor.c和skynet_monitor.h中,当服务可能陷入死循环的时候,就打一条日志。具体日志内

2017-08-21 10:41:41

skynet源码分析(3)--消息名字和ID之handle

作者:shihuaping0918@163.com,转载请注明作者消息机制是skynet中一个比较难理解的东西,在开始分析代码前,建议先读一下云风的博客和skynet的WIKI。SKYNET设计综述:http://blog.codingnow.com/2012/09/the_design_of_skynet.html,CLUSTER:https://github.com/cloudwu/skyn

2017-08-21 10:41:38

skynet源码分析(2)--消息队列mq

作者:shihuaping0918@163.com,转载请注明作者消息队列是skynet的核心功能之一,它的功能说白了就是入队出队,先进先出,这个数据结构都有讲过。源码实现在skynet.h和skynet.c中。下面来看一下这两个文件。#ifndef SKYNET_MESSAGE_QUEUE_H#define SKYNET_MESSAGE_QUEUE_H#include #includ

2017-08-21 10:41:35

skynet源码分析(1)--模块加载

作者:shihuaping0918@163.com,转载请注明作者两个月前接触skynet,最初使用的时候过程是相当痛苦的,而且网络上可以找到的学习资料并不多。当时决定写一些skynet相关的文章,最近终于有空了,开始写这个东西。skynet是云风开源的一个游戏框架,底层是c,中间层和上层都是lua。基于actor模型,使用消息队列进行内部通信。万丈高楼平地起,先开始看最底层的内容吧,因为上层

2017-08-21 10:41:32

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!