skynet是云风团队发布的一个开源的服务器框架。底层采用C编写,逻辑层通常用lua。非常适合作为游戏的服务器框架。学习skynet,可能涉及到操作系统,window,linux,游戏服务器等方方面面的知识,是一个不可多得的开源项目。作为菜鸟的希望把学习的过程记录下来,无论对于面试和工作都有莫大的帮助。 官方的指南 https://github.com/cloudwu/skynet/wi
1、节点和服务        在下图所示的服务端系统中,每个Skynet进程(操作系统进程)都称为一个节点,每个节点都可以开启数千个Lua服务,每个服务都是一个Actor。不同节点可以部署在不同的物理机上,提供分布式集群的能力。     在上图中,我们开启了3个节点和5个服务的服务端系统。
最近我们的新游戏《天天来战》上了腾讯平台,由于瞬间用户量过大,发现了几个 bug。这几个 bug 都是在最后一周赶进度时编写业务的同学写的太仓促,在一些处理请求的流水线上使用了时间复杂度 O(n) 以上的算法导致的问题。这些时间开销大的操作,虽然并不常见,但操作误放在了和用户登录相关的服务中,导致一旦阻塞,使得用户登录受到影响。具体 bug 没什么好谈的,把业务拆分开,以及用 O(Log N) 或
转载 2023-09-09 08:50:51
155阅读
Skynet是一个开源的分布式系统工具,用于构建高性能、高可靠性、可扩展性的服务。而Protobuf是Google开发的一种用于结构化数据序列化的协议,通常用于在不同系统间进行数据交换。在Kubernetes中使用Skynet和Protobuf可以帮助我们更好地管理和通信不同部署在集群中的应用程序。 整个实现"Skynet Protobuf"的流程可以分为以下几个步骤: | 步骤 | 操作
原创 4月前
34阅读
skynet 在最初的设计里,希望做一个分布式系统,抹平 actor 放在本机和处于网络两端的差别。所以,设计了 master/slave 模式。利用 4 个字节表示 actor 的地址,其高 8 位是节点编号,低 24 位是进程(节点)内的 id 。这样,在同一个系统中,不管处于哪个进程下,每个 actor (在 skynet 中被成为服务)都有唯一的地址。在投递消息时,无需关心目的地是在同一个
前言skynet是我们游戏服务端的底层框架,当初在技术选型的时候仔细阅读过它的源码,发现它是一个C语言的工程典范。大多数游戏服务端,要么使用C++,要么使用java,使用C是非常少见的。但是skynet通过C和Lua的结合,实现了一个高效的游戏框架,C层没有多余的一堆三方库,只有紧凑的核心结构,提供最核心的消息处理框架;Lua层用来写游戏逻辑,降低了开发门槛。目前skynet在阿里游戏大量使用,据
要想认识一个框架,首先要做的就是让它跑起来。skynet是一款基于C跟lua的开源服务端并发框架,这个框架是单进程多线程模型,主要应用于游戏服务端领域,是lua大神云风所写的。本文不涉及框架过多的理论知识,只是简单的介绍一下如何编译以及运行skynetskynet开源项目地址:https://github.com/cloudwu/skynet源码下载git clone https://githu
对于你不了解的框架或者引擎,介绍再多的逻辑结构都好像有点茫然的感觉。所以小编认为,最有效的方式就是搞清楚框架启动流程的步骤,让自己心中有一条线可以牵引着。以下内容转载于网友分享的文档里说明。对小编来说,如获珍宝,在这里也分享给大家。启动流程的相关源代码在skynet-src\skynet_main.c 和skynet-src\skynet_start.c 这两个文件中。skynet_main.c
转自:请求回应模式是与外部交互最常用的模式之一。通常协议设计方式有两种:1.每个请求包对应一个回应包,有tcp保证时序,先请求的先回应,但不必收到回应才发送下一个请求,redis的协议就是这种类型;2.每个请求带一个唯一的session标识,回应包也带这个标识。这样每个请求不一定都需要回应,且不用遵循先请求先回应的时序。mongodb的协议就是这种类型。skynet提供socketchannel库
skynet 是一个为网络游戏服务器设计的轻量框架,采用单进程,多线程架构。底层是c,中间层和上层都是lua。基于actor模型,使用消息队列进行内部通信。 简单说,可以把 skynet 理解为一个简单的操作系统,它可以用来调度数千个 lua 虚拟机,让它们并行工作。每个 lua 虚拟机都可以接收处理其它虚拟机发送过来的消息,以及对其它虚拟机发送消息。每个 lua 虚拟机,可以看成 sk
千呼万唤始出来,终于有时间开始分析skynet网络部分的代码了。skynet是个网络服务器框架,网络才是他的核心所在,读懂了网络模块的代码才算是对skynet有深入的了解。花了两天时间读了网络部分的代码,底层网络模型是基于epoll的,这个在llinux高并发上是最高效的模型。底层网络的各种操作或响应(诸如accept,msg,close)也是通过发送消息告知lua层的回调函数,这点与前面讲的服务
转载 7月前
69阅读
前言 skynet是我们游戏服务端的底层框架,当初在技术选型的时候仔细阅读过它的源码,发现它是一个C语言的工程典范。大多数游戏服务端,要么使用C++,要么使用java,使用C是非常少见的。但是skynet通过C和Lua的结合,实现了一个高效的游戏框架,C层没有多余的一堆三方库,只有紧凑的核心结构,提
转载 2021-01-12 11:50:00
406阅读
2评论
skynet是一个轻量级的游戏服务器框架;实现了actor的并发模型;可以基于skynet框架去实现业务。多核并发编程多线程在一个进程中开启多线程,为了充分利用多核,一般设置工作线程的个数为 cpu 的核心数;memcached 就是采用这种方式;多线程在一个进程当中
转载 2022-04-25 12:02:12
630阅读
# 实现Skynet Redis订阅 ## 1. 流程概述 在开始之前,让我们先了解一下整个Skynet Redis订阅的流程。下面是一个展示每个步骤的表格。 | 步骤 | 描述 | | --- | --- | | 步骤1 | 连接到Redis服务器 | | 步骤2 | 订阅指定的频道 | | 步骤3 | 接收并处理订阅的消息 | | 步骤4 | 断开与Redis服务器的连接 | 接下来,
原创 9月前
88阅读
skynet学习文章序章
原创 2020-09-21 12:08:44
426阅读
自己想实现一个tcp 粘包,残包的功能。 先看看一些开源的库是怎么实现的。 首先开启一个线程。使劲的执行: skynet_socket_poll skynet_socket_poll 这个玩意是干嘛的呢?就是处理socket消息 工作流: socket_message -> skynet_socke
原创 2021-07-30 11:47:27
367阅读
SKYNET Linux编译是一个重要的过程,它可以帮助我们定制自己的操作系统,以满足特定需求和要求。在这篇文章中,我们将重点探讨SKYNET Linux编译的过程,以及与之相关的一些关键概念和技术。 首先,让我们来了解一下SKYNET Linux的背景。SKYNET Linux是一个基于Linux内核的开源操作系统,它具有高度的灵活性和可定制性。SKYNET Linux的设计理念是“极简、极致
前言skynet是基于C做任务调度和消息传递, 基于lua做业务(消息)处理的框架。只要使用的平台c编译器支持c99,就能够编译运行skynet。 所以理论上skynet可以运行在嵌入式领域的。虽然skynet非常好用,但是skynet却不太好入门。 如果不充分理解skynet的原理,那么会提高不少的维护成本。因此编写此文档旨在更了解skynet的原理。 关于skynet框架的C语言部分网上已经很
写在最前面 skynet是目前使用比较广泛的服务端框架,虽然目前网上资料众多,但是从自己的学习和使用经历来看,缺乏能够让自己系统了解该框架底层机制的资料,这段时间,趁着自己有时间,阅读了skynet底层的一些代码,现在将自己理解的部分总结并记录下来,以备日后使用。本文旨在捋清skynet框架的结构和主要流程,并不会涉及skynet的方方面面,一些论述,我贴上了一些源码加以论证,并在引用的源码里加
  • 1
  • 2
  • 3
  • 4
  • 5