展开

关键词

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

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

722120

Python游戏服务器开发日记(一)目标

我个人极度喜欢skynet,由于很多原因,skynet几乎不可能修改为Python脚本。 原因除了众所周知的GIL(Python全局锁)问题以外,还有Python的Interpreter是极为重量级的,如果像skynet的独立lua_state那样使用,怕是什么都不做也能把内存全部用光。 但是,在研究了skynet之后,我认为以后必然会大量参考skynet的成熟做法,甚至copy很多C语言层的代码。毕竟和高手对构的理解,和C语言经验上,实在是差的太多。

99610
  • 广告
    关闭

    11.11智惠云集

    2核4G云服务器首年70元,还有多款热门云产品满足您的上云需求

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

    再谈游戏服务器

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

    2.5K131

    开源的服务器你都知道吗

    有哪些开源游戏服务器,值得学习呢。基于node.js 、java、C#、golang 、c++、python 等技术栈有各种各样的游戏。 本文收集一些比较常用的 github上star和fork有一定数量的较为完整的 ---- skynet skynet 云风大神的这个基本上使用很多的, c+lua的skynet只能算是网络层的轮子但是因为其众多的用户还是很不错的,主要的思想是基于Actor模型,Actor之间通信的唯一机制就是消息传递。 这个没怎么看过。 你还知道哪些开源的游戏欢迎留言END

    26520

    服务器开发语言比较

    还可远程调试上手度:对C系语言熟悉的几天就可上手热更新:可以通过DLL方式进行Web对接:可做,代码比较啰嗦崩溃处理:可通过try catch捕获错误网络库编写难度:一般,需注意gc问题第三方网络库及数量 linux平台的.so加载忽略不计)Web对接:非常方便, 代码精简崩溃处理:崩溃后以命令行方式打印出栈,程序内可以捕获任何崩溃错误并继续运行网络库编写难度:简单,比C socket更简单第三方网络库及数量 适应需要耗费一定的时间热更新:类似于Erlang,可精确到函数级的热更新Web对接:有一些http支持,通过社区慢慢进行完善崩溃处理:lua天生可以捕获错误网络库编写难度:自带,无需编写第三方网络库及数量 代码啰嗦,第三方库少崩溃处理:Windows下可使用SEH捕获段异常,其他平台只能通过崩溃后进行coredump分析,容错非常差网络库编写难度:基于asio编写较为简单,但总体看来难度不低第三方网络库及数量 , C++的服务器工具链和已经相对成熟, 完全没必要更换新语言, 只是在对接sdk感觉困难时,可以尝试Golang这些对web有优势的语言进行混合语言开发对于新团队,开发效率,上手度和部署效率是优先选择的

    47350

    服务器开发语言比较

    还可远程调试上手度:对C系语言熟悉的几天就可上手热更新:可以通过DLL方式进行Web对接:可做,代码比较啰嗦崩溃处理:可通过try catch捕获错误网络库编写难度:一般,需注意gc问题第三方网络库及数量 linux平台的.so加载忽略不计)Web对接:非常方便, 代码精简崩溃处理:崩溃后以命令行方式打印出栈,程序内可以捕获任何崩溃错误并继续运行网络库编写难度:简单,比C socket更简单第三方网络库及数量 适应需要耗费一定的时间热更新:类似于Erlang,可精确到函数级的热更新Web对接:有一些http支持,通过社区慢慢进行完善崩溃处理:lua天生可以捕获错误网络库编写难度:自带,无需编写第三方网络库及数量 代码啰嗦,第三方库少崩溃处理:Windows下可使用SEH捕获段异常,其他平台只能通过崩溃后进行coredump分析,容错非常差网络库编写难度:基于asio编写较为简单,但总体看来难度不低第三方网络库及数量 , C++的服务器工具链和已经相对成熟, 完全没必要更换新语言, 只是在对接sdk感觉困难时,可以尝试Golang这些对web有优势的语言进行混合语言开发对于新团队,开发效率,上手度和部署效率是优先选择的

    1.5K130

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

    目前网上优秀的开源游戏服务器也不少(当然与web比起来就少太多了),但总结起来都各有各的优缺点,下面列出我在选型过程中的一些考量,希望大家能开放的讨论,有不恰当的地方也请指正。 首先是开发语言目前用于游戏服务器开发的主要应该有以下这些语言:cc++优点:性能很好开源:skynet底层是C 开发语言是lua,没有客户端库kbengine底层是C++ 开发语言可以使用C#,Python 回调函数的设计,这样的设计在golang应该可以避免 游戏的不足结合个人的实际情况,当时我主要的选择从 skynet Pomelo leaf 这三个里面来选择skynet设计思路非常牛逼,看了风云大牛的设计感觉应该是一个高性能 但个人认为skynet可能也会有以下的两个问题Actor模式可能对构能力比较高,不如rpc模式明了skynet使用第三方网络库的时候可能需要造轮子,要放开膀子开发有些难,跟python tornado ,其实这几个都非常优秀,只是不同的需求有不同的要求罢了,希望大家能根据自己实际需求选择最适合自己的对游戏服务器的想法自己心里也对游戏服务器有一些自己的想法,最终决定造这个轮子。

    1.7K70

    高性能高并发socketmushroom来袭,跨全部平台

    为此开发了这个高性能高并发的网络。mushroom是一个高性能的跨全平台的socket网络。 mushroom之所以如此强大,是因为它的网络模块来自服务端skynet,纯C语言开发,使用epoll,kqueue, select等事件复用技术。 在国内有众多依托skynet的游戏产品在运行,而mushroom的网络模块来自skynet,因此,它的稳定性已经得到很好保障。 软件构mushroom的网络模块来自skynet,采用事件复用技术,linux和安卓采用epoll,macox和iOS采用kqueue,win采用select。 直接把include和lib导入到工程就可以使用mushroom。bin文件夹内含一些测试程序。可以通过git工具下载源代码。

    76450

    如何实现一个定时器?

    O(1)红黑树:插入O(logn),删除O(logn),过期expire执行O(logn)哈希表+链表(时间轮):插入O(1),删除O(1),过期expire平均执行O(1)(最坏为O(n))不同开源定时器实现方式不一 ,如,libuv采用最小堆来实现,nginx采用红黑树实现,linux内核和skynet采用时间轮算法实现等等。 20210323182236910跳表实现定时器跳表查找,插入,删除(任意节点、头节点)的时间复杂度大概率趋向于O(logn)过期任务查找,只需要跟第一个节点比较,因其第一个节点即为最小节点学会吸取开源中优秀数据结构和代码思想 = le.end(); iter++) { CTimerNode *p = *iter; if (p && p->trySkill()){ delete p; } } le.clear();} Skynet 驱动方式skynet启动时,会创建一个线程专门跑定时器,每帧(0.0025s)调用skynet_updatetime() skynet_start.cstatic void * thread_timer

    26660

    skynet---3---看看

    17320

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

    最终,基于启元决策智能平台训练的Navocado战胜了来自加拿大的Skynet,拿下Learning组冠军。Skynet的团队来自加拿大近百人规模的科技公司Borealis.ai。 来源:启元世界视频中展示的是Navocado和Skynet争夺学习组冠军的最后一战。其中,两个黑色脸谱的炸弹人属于Navocado,而两个白色脸谱的炸弹人属于Skynet。 启元决策智能平台搭建了支持多智能体博弈的基础构,能够通过竞技的方式实现多智能体持续学习的能力。平台还支持包括自动化资源调度和自动调参的元学习,使得模型训练更加高效。 图3:启元决策智能平台构 在此次NeurIPS多智能体竞赛中,启元决策智能平台提供了三大助力:第一,支持智能体持续学习的能力。持续学习的能力是智能体训练中关键的一环。 启元决策智能平台将构图中所示的多个模块进行组件化,并封装到了容器中。通过云端自动化的方式管理数百CPU以及GPU资源并实现容器编排,降低了调度数十个炸弹人训练任务的成本。

    31930

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

    版本选定之后,就开始真正的技术选型了,这里我大致罗列了一下,其中有些是方向,有些是工具插件,有些是设计思路。但总体还是囊括了客户端该有的技术部分。? 但是在讲Sproto之前呢,还必须先拓展另外一个东西:skynetskynet是云风大神创建的开源服务器,使用C和Lua结合的技术搭建的基于Actor模式的引擎。 这里不会拓展讲解skynet的技术细节,有兴趣的可以去看下我同事对于skynet的源码赏析。回到刚才SProto的问题上来,Skynet本来是支持PB(proto buffer)的。 移动开发一路走来有很多Lua相关的,比如toLua,uLua,slua,Xlua等。所以有的时候就会想,有没有既可以实现热更新又能提高性能的方法,那么Xlua就是这种。 WwiseWwise是一个音效,其实这里能选择的余地不大,基本就是fmode和Wwise两种。但是近几年fmode有些没落,操作、性能和工具链都跟不上了,以前可是一枝独秀。

    71520

    SlideShare案例研究:使用Fluentd呈现统一数据

    充分利用Fluentd的可扩展构。 对于SlideShare,它意味着通过以可扩展(读取:自动化)方式密切监视其应用程序和服务基础构,确保其服务保持吸引力和可用性。 此外,Fluentd的插件生态系统让他们相信他们可以扩展Fluentd以使用Slideshare的构进行演变。“Fluentd擅长流处理,很容易与你选择的任何后端系统集成。” 使用Fluentd作为关键组件,SlideShare实施了一个名为Skynet的新监控系统。 Skynet收集应用程序日志和系统指标,并将它们传递给Fluentd,以便可靠地收集和聚合到MongoDB中,其内部仪表板使用MongoDB。

    23220

    Unity手游实战:从0开始SLG——本地化篇(五)服务器下发配置

    1 Sproto协议在之前的客户端技术选型的文章里我们就介绍过,服务器使用的是SkyNet。 Unity手游实战:从0开始SLG——客户端技术选型https:zhuanlan.zhihu.comp76229685Sproto 是谷歌Proto的一个变种,是云风基于SkyNet实现的一种优化格式。 之所以选择这个格式是因为SkyNet对Proto的支持只到2.x,并且已经不再维护了。而Sproto更符合目前服务器在Lua端的性能表现。为了配合服务器的通信协议格式,客户端也选择使用Sproto。 而这个时候,数据下发依然可以通过上述的结构进行数据增补,每次服务器有屏蔽词下发,就重建一次服务器屏蔽词树,因为服务器增补的条目数一般都很少,几乎不会造成性能问题(即使有也是一瞬间)。 当然这些使用到的都是基于上述的增补。6 运营介入这部分涉及到的是运营的各种公告和通知。比如紧急停机,突发状况等等,这些都是无法预料的,自然也无法事先将语言或者数据配置在表格中。

    23530

    推荐一套国外超棒的计算机科学视频课程(不是广告)

    不要天天谈什么,什么库,每年层出不穷,可是扒下那层炫酷漂亮的外衣,里面还是那些最基础的知识和原理。好了,不说了,再说你们就认为我在灌鸡汤。今天看看我给大家推荐的一个国外的计算机科学速成课。 Psychology of Computing39 - 教育型科技 - Educational Technology40 - (完结) 奇点,天网,计算机的未来 - The Singularity, Skynet

    65510

    怎么样去处理样本不平衡问题 | (文后分享大量检测+分割

    模型RetinaNet-Obj? Eliminating Batch Dependence in the Training of Deep Neural Networks》 作者团队:Google Research目标检测中主动学习的自适应监督 》用于目标检测的轻量级RetinaNet Date:20190527 Author:亚利桑那州立大学 --- 《Light-Weight RetinaNet for Object Detection》SkyNet :低功耗目标检测的冠军模型(DAC-SDC 挑战赛) 注:SkyNet超越 Tiny YOLO,YOLOv2,SSD,MobileNet等组合算法,实时运行在TX2(GPU)+ Ultra96(FPGA )上 Date:2019 Author:IBM & Inspirit IoT --- 《SkyNet: A Champion Model for DAC-SDC on Low Power Object

    72910

    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 倍)。

    32720

    AI专家社区VS马斯克阵营:一部纪录片引发的「AI威胁」论战

    算是相当具有话题性了,现在导演又盯上了「AI 威胁论」,并拉上了一直鼓吹「AI 威胁论」的马斯克,预告片一出就在以专家为主的 AI 专家阵营和以马斯克为主的非专家群体之间造成了极大的讨论,现在来借外媒 Skynet François Chollet,谷歌 AI 研究人员(Keras 作者)? Skynet Today 的观点Chris Paine 导演可能打算借影片让大家意识到「AI 风险」这一极其重要的话题,但是他的纪录片却用了很多语出惊人的方式误导观众,这明显弊大于利。 Skynet Today 也认同,当前的 AI 风险需要更多时间来克服这一不争事实,但与此同时,许多研究人员已经在付诸行动。 via Skynet Today,AI 科技评论编译。

    15730

    Go语言开源项目知多少

    RevelRevel是一个高生产力的Go语言Web。Revel支持热编译,当编辑、保存和刷新源码时,Revel会自动编译代码和模板;全栈特性,支持路由、参数解析、缓存、测试、国际化等功能。 工具类: goclipse:是一个eclipse插件,可以用来开发go语言 liteide: 专门用来开发go的ide应用类: Go Read :go语言开发的可替代google reader的东西 类 : beego:强大的web gwk: gwk(GO Web Server Kit)是GO语言的Web Server开发,简单易用,扩展性好,而且兼容Go App Engine。 Go成功的项目 nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息 packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者 skynet :分布式调度 Doozer:分布式同步工具,类似ZooKeeper Heka:mazila开源的日志处理系统 cbfs:couchbase开源的分布式文件系统 tsuru:开源的PAAS平台,和SAE

    1.6K70

    服务器构分析

    今天写一下游戏服务器的构,主要还是还是分析下服务器构的原理,以及解决的问题 1、服务器构演变的最主要的原因是1、解决压力的问题,想用较低的价值组合完成任务,也就是一堆垃圾服务器组成集群完成任务。 2、解决业务需求,比如这种跨服的需求,如果不单独做一个服务器,业务交互将及其复杂2、典型的服务器构介绍下图基本上是苏州这边游戏公司的服务器构图。? 此时所有的战斗消息从Gate服直接路由到Fighter服,战斗结果发送给Game服,然后进行发奖等逻辑玩家移动流程:玩家移动消息同步给Scene服,Scene服每一帧同步给所有的玩家3、流行的服务器介绍 1、Skynet 2、pomelopinus Pomelo 是由网易开发的基于 开发的高性能、分布式游戏服务器, 也可作为高实时 Web 应用。 5、总结所有的服务器构都是为业务而存在,从游戏出发,根据需求扩展自己的服务器构。下期我们从头简单的写一个tcp 服务器

    15920

    相关产品

    • Serverless  SSR

      Serverless SSR

      Serverless SSR 基于云上 Serverless 服务,开发了一系列服务端渲染框架组件,目前支持 Next.js, Nuxt.js 等常见 SSR 框架的快速部署,帮助用户实现框架迁移, “0”配置,SEO 友好,首屏加载速度快,为用户提供了便捷实用,开发成本低的网页应用项目的开发/托管能力。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券