首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

skynet源码解析(一)——编译运行skynet

要想认识一个框架,首先要做的就是让它跑起来。 skynet是一款基于C跟lua的开源服务端并发框架,这个框架是单进程多线程模型,主要应用于游戏服务端领域,是lua大神云风所写的。...本文不涉及框架过多的理论知识,只是简单的介绍一下如何编译以及运行skynet。...skynet开源项目地址: https://github.com/cloudwu/skynet 源码下载 git clone https://github.com/cloudwu/skynet.git...正常的话编译是需要一定的时间的,如果编译成功之后就会产生以下3个新的文件,其中skynet就是我们需要的可执行文件,这也是最核心的一个文件。 那么我们如何验证编译的这个文件是真的没问题呢?...那么我们就需要运行一下skynet这个可执行文件。 运行可执行文件 ./skynet example/config 一定要记得需要加个运行参数,这个是运行所需要的配置文件。

35110
您找到你想要的搜索结果了吗?
是的
没有找到

skynet源码解析(二)——启动流程

对于你不了解的框架或者引擎,介绍再多的逻辑结构都好像有点茫然的感觉。所以小编认为,最有效的方式就是搞清楚框架启动流程的步骤,让自己心中有一条线可以牵引着。 以下内容转载于网友分享的文档里说明。...启动流程的相关源代码在skynet-src\skynet_main.c 和skynet-src\skynet_start.c 这两个文件中。...skynet_main.c 主要是设置环境和加载配置文件,最后调用skynet_start.c 文件中的 skynet_start() 函数启动 Skynet 服务程序。...5、skynet_mq_init()初始化消息队列模块,这是 Skynet 的主要数据结构。这个函数定义在 skynet_mq.c 中。...以上就是skynet框架的启动流程,这里采用的是广度优先遍历的方式进行解析,这个方式对于解析框架来说确实是一种很好的学习方式。我们先不管这个接口内部的具体,我们先了解这个接口是做什么。

22310

go实现一个简单的游戏服务器框架(lotou)起源

最近一直想学习一些关于游戏服务器的知识,显示看了一下云风的skynet框架,从而对于一个游戏服务器框架有了一个基本概要了解。先来说说我对于skynet的一些理解吧。...skynet理解 skynet只完成了服务器最核心的一部分功能,必须消息分发,必须服务的创建、销毁以及服务间的通信。 skynet中最核心的两个部分,网络和消息分发。...在看完skynet之后,当然也只是一知半解,不过基本还是达到了可以使用的程度了。...,也已经有很多人用skynet写了游戏服务器,但是中最要的一点还是我不太习惯动态语言,使用lua来写代码,让我很没有底气。...通过几天的go语言学习,我决定用它来实现自己的第一个游戏服务器框架,因为以前没有怎么接触过游戏服务器编程,所以就只好模拟一下skynet的行为了。

1.6K120

再谈游戏服务器架构

通过attach操作获得数据(attach可能是通过服务器通讯框架skynet,也有可能直接mmap到共享内存sharedb上以获得数据)。...三、服务器底层框架skynet skynet的设计思想见《Skynet 设计综述》: 我希望我们的游戏服务器(但 skynet 不仅限于用于游戏服务器)能够充分利用多核优势,将不同的业务放在独立的执行环境中处理...每个模块可以向 Skynet 框架注册一个 callback 函数,用来接收发给它的消息。每个服务都是被一个个消息包驱动,当没有包到来的时候,它们就会处于挂起状态,对 CPU 资源零消耗。...本人感觉skynet像一个发布订阅的消息中间件(还没看源码,可能有误),这种基于服务的即插即用式的框架给服务器端带来很大的可扩展性,同时也使得各模块之间独立清晰,具有良好的可维护性。...看了《Skynet 集群及 RPC》,感觉skynet上的服务是要通过skynet来获得玩家的数据,这样操作会不会导致数据被复制很多次,不知道最终的效率是否受到影响?

4.4K131

如何实现一个定时器?

) 红黑树:插入O(logn),删除O(logn),过期expire执行O(logn) 哈希表+链表(时间轮):插入O(1),删除O(1),过期expire平均执行O(1)(最坏为O(n)) 不同开源框架定时器实现方式不一...20210323182236910 跳表实现定时器 跳表查找,插入,删除(任意节点、头节点)的时间复杂度大概率趋向于O(logn) 过期任务查找,只需要跟第一个节点比较,因其第一个节点即为最小节点 学会吸取开源框架中优秀数据结构和代码思想...红黑树实现定时器 AVL 树平衡要求太高,维护平衡操作过多,较复杂;红黑树只需维护一个黑高度,效率较高 红黑树查找,删除,添加时间复杂度为:O(log(n)) 吸取开源框架中优秀数据结构和代码思想,选用...定时器初始化 // skynet_start.c // skynet 启动入口 void skynet_start(struct skynet_config * config) { ......skynet_timer_init(); ... } // skynet_timer.c void skynet_timer_init(void) { // 创建全局timer结构 TI

1.5K71

服务器开发语言比较

以下比较的基础都是基于一种编程语言+一定的第三方或者自己编写的网络库和底层进行的,Skynet稍微特殊,但总体比较合适放到比较中来 C# 开发效率:Windows下可以通过VisualStudio进行开发...上手度:对C系语言熟悉的几天就可上手 热更新:可以通过DLL方式进行 Web对接:可做,代码比较啰嗦 崩溃处理:可通过try catch捕获错误 网络库编写难度:一般,需注意gc问题 第三方网络库及框架数量...:偏少 Skynet(lua+C) 开发效率:基于动态语言的开发初次写比较快,后期维护和重构会耗费一定的时间在查错上 运行效率:基于lua jit的运行效率还是能接受的 部署便捷性:方便, 只有底层修改需要重新编译...从发文时的项目对这些语言使用率来说,Java,Erlang,C++编写的服务器较多,Golang,JavaScript,C#是第二梯队,Skynet由于上手不是很容易,所以仅有两位数的团队在使用,但总体表现还是比较出色的...,C#,Golang,JavaScript这些新兴语言会让你事半功倍 对于大规模无需选服的服务器, Skynet的actor模型对扩展会比较容易 对于大公司,好项目,上线后需要通过热更新进行bug修补的

1.8K50

服务器开发语言比较

下比较的基础都是基于一种编程语言+一定的第三方或者自己编写的网络库和底层进行的,Skynet稍微特殊,但总体比较合适放到比较中来 C# 开发效率:Windows下可以通过VisualStudio进行开发...上手度:对C系语言熟悉的几天就可上手 热更新:可以通过DLL方式进行 Web对接:可做,代码比较啰嗦 崩溃处理:可通过try catch捕获错误 网络库编写难度:一般,需注意gc问题 第三方网络库及框架数量...:偏少 Skynet(lua+C) 开发效率:基于动态语言的开发初次写比较快,后期维护和重构会耗费一定的时间在查错上 运行效率:基于lua jit的运行效率还是能接受的 部署便捷性:方便, 只有底层修改需要重新编译...从发文时的项目对这些语言使用率来说,Java,Erlang,C++编写的服务器较多,Golang,JavaScript,C#是第二梯队,Skynet由于上手不是很容易,所以仅有两位数的团队在使用,但总体表现还是比较出色的...,C#,Golang,JavaScript这些新兴语言会让你事半功倍 对于大规模无需选服的服务器, Skynet的actor模型对扩展会比较容易 对于大公司,好项目,上线后需要通过热更新进行bug修补的

3.5K130

为什么决定要重新造一个轮子?

首先是开发语言 目前用于游戏服务器开发的主要应该有以下这些语言: c/c++ 优点: 性能很好 开源框架: skynet底层是C 开发语言是lua,没有客户端库kbengine底层是C++ 开发语言可以使用...callback回调函数的设计,这样的设计在golang应该可以避免 游戏框架的不足 结合个人的实际情况,当时我主要的选择从 skynet Pomelo leaf 这三个框架里面来选择 skynet设计思路非常牛逼...但个人认为skynet可能也会有以下的两个问题 Actor模式可能对架构能力比较高,不如rpc模式明了 skynet使用第三方网络库的时候可能需要造轮子,要放开膀子开发有些难,跟python tornado...,其实这几个框架都非常优秀,只是不同的需求有不同的要求罢了,希望大家能根据自己实际需求选择最适合自己的框架 对游戏服务器框架的想法 自己心里也对游戏服务器框架有一些自己的想法,最终决定造这个轮子。...,并且也使用了leaf框架的部分代码。

3K70

Unity手游实战:从0开始SLG——客户端技术选型

版本选定之后,就开始真正的技术选型了,这里我大致罗列了一下,其中有些是框架方向,有些是工具插件,有些是设计思路。但总体还是囊括了客户端该有的技术部分。 ?...但是在讲Sproto之前呢,还必须先拓展另外一个东西:skynetskynet是云风大神创建的开源服务器框架,使用C和Lua结合的技术搭建的基于Actor模式的引擎。...这里不会拓展讲解skynet的技术细节,有兴趣的可以去看下我同事对于skynet的源码赏析。 回到刚才SProto的问题上来,Skynet本来是支持PB(proto buffer)的。...出于优化的目的,skynet使用了一套自定义的格式Sproto。它其实是基于proto的改良,将proto里的冗余表达进行了简化,让它更满足于skynet在Lua端的性能表现。...移动开发一路走来有很多Lua相关的框架,比如toLua,uLua,slua,Xlua等。 所以有的时候就会想,有没有既可以实现热更新又能提高性能的方法,那么Xlua就是这种。

4.9K20

NeurIPS首届多智能体竞赛,中国团队获Learning组冠军

最终,基于启元决策智能平台训练的Navocado战胜了来自加拿大的Skynet,拿下Learning组冠军。Skynet的团队来自加拿大近百人规模的科技公司Borealis.ai。...从Skynet在官网公开的实现方案来看,Skynet模型在决策过程中加入了很多人工干预(比如限制炸弹人不能往火焰里走),这和Navocado模型在整个训练和决策过程中不加人工干预、自主学会各项技能的方式也有较大的差距...NeurIPS多智能体竞赛终局:第600步(视频中最下栏显示),Navocado控制的一个炸弹人(黑色脸谱)在最正确的时机使用踢炸弹的方式将Skynet的一个炸弹人(白色脸谱)炸死。...来源:启元世界 视频中展示的是Navocado和Skynet争夺学习组冠军的最后一战。其中,两个黑色脸谱的炸弹人属于Navocado,而两个白色脸谱的炸弹人属于Skynet。...在第600步(视频中最下栏显示),Navocado控制的一个炸弹人在最正确的时机使用踢炸弹,将Skynet的一个炸弹人炸死。

94530

DAC 2019低功耗目标检测系统设计挑战赛:GPU、FPGA组双冠军方案解读

在两个组别中,我们均采用了自主设计的 DNN 模型 SkyNet。得益于全新设计的精简网络结构,我们在两项赛事都获得了冠军。...图 4: 我们提出了一种自底向上的 DNN 设计方案,并使用此方案设计了参赛模型 SkyNet。...图 5: SkyNet 网络结构 ? 图 6: 特征图重排列方案 轻量化检测网络 SkyNet 依照自底向上的设计方案,我们设计出 SkyNet 作为参赛模型(图 5)。...图 7: 比赛需要检测的小物体实例 SkyNet 终端部署结果 在本次比赛中,我们的 GPU(iSmart3-SkyNet)和 FPGA(iSmart3)设计均使用 SkyNet 作为主干网络,并使用精简过的...在使用相同硬件设备(TX2 GPU)的前提下,iSmart3-SkyNet 提交的设计相比其余 GPU 参赛队伍,有着大幅度吞吐率提升(比第二名提高 2.3 倍)。

1.2K20
领券