发表了博客
2018/06/20 14:12

skynet源码分析:模块

之前已经说过skynet的是做什么的,现在开始从模块上研究skynet的源码。 skynet各层表现 从上大概就清楚skynet的“内部” 而skynet源码目录结构如下: 3rd:第三方代码,有lua和jemalloc等。 lualib:使用lua写的库 lualib-src:使用C写并封装给lua使用的库 service:使用lua写的skynet的服务模块 service-src:使用C写的...

0
0
发表了博客
2018/07/05 13:52

skynet源码分析:Socket

skynet 的 C API 采用异步读写,你可以使用 C 调用,监听一个端口,或发起一个 TCP 连接。但具体的操作结果要等待 skynet 的事件回调。skynet 会把结果以 PTYPE_SOCKET 类型的消息发送给发起请求的服务。(参考skynet_socket.h) 在处理实际业务中,这样的 API 很难使用,所以又提供了一组阻塞模式的 lua API 用于 TCP ...

0
0
发表了博客
2018/06/20 14:22

skynet源码分析:http

skynet中有http server和http client的代码,用来支持http访问。在分析http之前,要先看一下url库。文件位于skyet/lualib/http/url.lua。 skynet 从 v0.5.0 开始提供了简单的 http 服务器的支持。skynet.httpd 是一个独立于 skynet 的,用于 http 协议解析的库,它本身依赖 socket api 的注入。使用它,你需要把读写 so...

0
0
2020/09/21 12:04

skynet学习序章

自己最近正在使用 skynet,为了方便今后的学习和使用,我决定开展一遍关于skynet的应用,前期主要是以skynet的一些api和基本的应用为主,后面主要是深入了解skynet的框架代码,也介绍一下,skynet在开发过程中,主...

0
0
发表于服务端专区
2019/07/19 18:37

Skynet 服务创建流程

Skynet 服务创建流程 根据设计综述 Skynet 是为了让服务器充分利用多核优势,将不同的业务放在独立的执行环境中处理。 Skynet 核心功能是加载一个 C 模块(动态库),模块用数字 id 标识,作为其 handle ,模块被...

0
6
发表了博客
2018/06/20 14:08

skynet源码分析:消息

消息队列mq 消息队列是skynet的核心功能之一,它的功能说白了就是入队出队,先进先出,这个数据结构都有讲过。源码实现在skynet_mq.h和skynet_mq.c中。 skynet的消息队列实际上是有两种,一种是全局消息队列,一种是服务消息队列。每个服务都有自己的消息队列,每个服务消息队列中都有服务的handle标识。这个涉及到消息的...

0
0
发表了博客
2020/10/17 07:26

(0)skynet 序章

自己最近正在使用 skynet,为了方便今后的学习和使用,我决定开展一遍关于skynet的应用,这篇文章主要是面对新手为主,从软件的安装,语言的介绍,到skynet的一些api和基本的应用。也介绍一下,skynet在开发过程中,主要应用到的技术特点。这次文章主要是以学习交流为主,对于文章中出现的错误或者理解有误等问题,希望各...

0
0
发表了博客
2013/06/01 23:15

skynet 中的 read all 函数

skynet 云风写的 ,。。。C 的代码简洁多了 个人觉得不做界面没必要用到 C++ 这个比较常用 贴一下吧 static int readall(int fd, void * buffer, size_t sz) {   for (;;) {     int err = recv(fd , buffer, sz, MSG_WAITALL);     if (err < 0) {       if (errno == EAGAIN || errno == EINTR)         continue;       brea...

0
0
发表了博客
2018/05/24 11:14

Skynet:Debug Console的扩展

起因 最近上线服务器遇到了一些问题,上个月CPU暴涨的问题,那个经查验是死循环导致endless loop了。 这周又遇到了mem占用达到96%的问题,在debug console里调用了gc之后,跌落至85%左右,稳定了一天。 但是在debug console里面调用list的时候,发现很多service数量有点异常,所以打算扩展一下debug console来统计各个s...

0
0
发表了博客
2019/04/11 12:11

白话skynet第一篇

当你走过一个坐在自己店门前的杂货商面前。走过一个吸着烟斗的守门人面前,走过一个马车夫面前时,请你给我描绘一下这个杂货商、守门人和马车夫,他们的姿态,他们的外貌,要用画家那样的细节描绘出他们的精神本质,使我不至于把他们同任何别的杂货商人、任何别的守门人、任何别的马车夫混同起来,还请你只用一句话就让我...

0
0
发表了博客
2018/06/20 15:30

skynet:热更新 lua 代码

skynet有两种方法热更新lua代码,clearcache和inject,文章分别对这两种方法做说明。 clearcache热更新 讲这个前,先说明下skynet代码加载的事情。因为skynet的每个服务都是一个独立的lua虚拟机,对于同一份lua代码,N个服务就要加载lua文件N次,所以,skynet做了优化,代码文件只需要加载一次到内存,其他服务复制这份内...

0
0
发表了博客
2018/01/09 20:14

skynet源码分析之消息队列

skynet核心之一是消息队列,各个服务(skynet_context_xxx,ctx,是一个c结构)之间是通过消息进行通信。skynet包含全局队列和次级队列两级队列,skynet开启多个工作OS线程(可配置),每个线程不断的从全局队列里pop一个次级消息队列,然后分发次级消息队列里的消息,分发完后(可能只分发一条消息,也可能分发多条甚至...

0
0
发表于游戏开发专区
2018/03/20 23:41

通过 skynet 学习到的 assert 的使用

assert 用于断言某条件必须成立,否者就会触发断言失败,比如在 C 中进程会退出并打印出行号,而 Lua 中打印出 traceback 。 有时候会听人说要学会使用 assert 。当时并不理解,因为 assert 就是断言某条件必须成立,很简单啊,怎么还特别强调要学会呢。直到后来看见关于 skynet 的多线程读写的 [issue794](https://git...

0
0
发表了博客
2019/07/18 17:15

skynet启动流程及调用服务

3.基本原理 3.1启动流程 1.skynet-src/skynet_main.c 这个是main()函数所在,主要就是设置一下lua的环境、默认的配置、打开config配置文件,并修改默认配置。最后调用skynet_start()函数,这个函数在skynet_start.c文件中。 2.skynet-src/skynet_start.c这个文件主要是初始化Skynet的各个模块,包括harbor节点、handle服...

0
0
发表了博客
2018/04/25 19:52

skynet源码分析之热更新

skynet有两种方法支持热更新lua代码:clearcache和inject,在介绍skynet热更新机制之前,先介绍skynet控制台,参考官方wiki https://github.com/cloudwu/skynet/wiki/DebugConsole 1. skynet控制台 想要使用skynet控制台,需启动debug_console服务skynet.newservice("debug_console", ip, port),指定一个地址。skynet启...

0
0
发表了博客
2019/03/29 11:55

skynet框架之日程表设计

参考云风大神的例子,对其进行了改进,支持多次提交单个日程,改变时间后,提前日程触发时间。 --[[ t提供了两种方案 方案1和2 ]] local skynet = require "skynet" local service = require "skynet.service" local schedule = {} local service_addr -- ttime = { month=, day=, wday=, hour=...

0
0
发表了博客
2018/11/17 16:26

skynet的timer似乎有问题

skynet.timeout 传进去 number 范围内的数值但是会溢出, 调查发现 skynet.timeout 调用的是 c 的方法: c.intcommand("TIMEOUT",ti) 对应的C方法中会把传入的 number 转换成 int32: static int lintcommand(lua_State *L) {   struct skynet_context * context = lua_touserdata(L, lua_upvalueindex(1));   const char *...

0
0
发表了博客
2020/10/17 07:28

(2)skynet ubuntu下载与安装

在这里我选择使用Ubuntu来运行skynet。新版本的Ubuntu不支持32位操作系统,如果电脑是32位的小伙伴,请下载17.10之前的版本。这次我们安装最新版本的Ubuntu,就是20.04.1版本,现在就来正式介绍一下如何下载和安装Ubuntu。 1.2 Ubuntu的下载和安装 登录Ubuntu官网:https://ubuntu.com/ 点击DownLoad选择20.04LTS 如果没有...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页