文章分类 - 服务器
摘要:最近我们的新游戏《天天来战》上了腾讯平台,由于瞬间用户量过大,发现了几个 bug。 这几个 bug 都是在最后一周赶进度时编写业务的同学写的太仓促,在一些处理请求的流水线上使用了时间复杂度 O(n) 以上的算法导致的问题。这些时间开销大的操作,虽然并不常见,但操作误放在了和用户登录相关的服务中,导致
阅读全文
摘要:一直有人问,如何调试 skynet 构建的服务。 我的简单答案是,仔细 review 代码,加 log 输出。长一点的答案是,尽量熟悉 skynet 的构造,充分利用预留的监控接口,自己编写工具辅助调试。 之前的好多年,我也写过很多 lua 的调试器,这里就不一一翻旧帖了。今天要说的是,我最终还是计
阅读全文
摘要:by: 云风blog 在 skynet 中,有一个叫 monitor 的内部模块,它会监测是否有服务可能陷入了死循环。 工作原理是这样的:每次处理一个服务的一个消息时,都会在一个和服务相关的全局变量处自增 1 。而 monitor 是一个独立线程,它每隔一小段时间(5 秒左右)都检测一下所有的工作线
阅读全文
摘要:by: 云风blog 最近,我们的合作方 陌陌 带了他们的一个 CP 到我们公司咨询一下 skynet 做 mmo 游戏项目中遇到的一些问题。因为他们即将上线一款 MMO ,在压力测试环节暴露了许多问题。虽然经过我们的分析,有很多问题出在他们的压力测试程序本身编写的 bug ,但同时也暴露出服务器的
阅读全文
摘要:from 云风blog 这样一个日程表服务并不复杂,我花了一点时间随手实现了一个,供大家参考。它应该有很大的改进空间,明白了其设计之后,应该不难完善它: 用 schedule.submit 可以申请一个时间点,到时后会返回。使用的时候只需要用 skynet.fork 开一个独立线程,循环调用 sch
阅读全文
摘要:引言: 今天修改了 skynet 服务器的 IP 地址(即 config 文件中的 address 和 master 两项参数,IP 与当前及其的保持一致,端口号为 2017),然后使用一个简单的客户端去连接服务器,结果服务器完全没有收到 Socket 连接请求,客户端也出现了连接超时,猜想应该是
阅读全文
摘要:skynet 目前的 api 提供的偏底层,由于一些历史原因,某些 api 的设计也比较奇怪。(比如 skynet.ret 是不对返回数据打包的) 我想针对一些最常见的应用环境重新给出一套更简单的 api ,如果按固定模式来编写 skynet 的内部服务会简单的多。 这就是这两天实现的 snax 模
阅读全文
摘要:引言: 在我看来,消息和任务调度应该是skynet的核心,整个skynet框架的核心其实就是一个消息管理系统。在skynet中可以把每个功能都当做一个服务,整个skynet工程在执行过程中会创建很多个服务,每个服务相当于一个 Actor ,是互不依赖并行执行的,但同时也存在服务之间的通信和彼此的任务
阅读全文
摘要:引言: 在skynet中,我们通常使用lua来写业务层的逻辑,并且每个功能模块基本上就是一个运行在沙盒中的lua服务。但是,当需要我们需要开发拓展的库或者进行高性能要求的模块开发时,还是需要考虑在C语言层面来开发一个动态库(.so),并提供可以在lua中调用的接口,然后再lua中调用此C库。 自定义
阅读全文
摘要:引言: 如何在skynet框架中使用socket+protobuf。上篇 Skynet服务器框架(五) 使用pbc(protobuf) 我们已经大致了解了如何在Skynet中通过pcb来使用Protobuf,接下来我们开始了解skynet中有关Socket的部分。 socket_server C源码
阅读全文
摘要:引言: 假如我们要建立的skynet服务器与客户端的连接方式为长连接,且选择了Google的Protobuf来定制我们的网络协议,那么,接下来我们要解决的问题就是:如何在skynet框架中使用socket+protobuf。 API 几个常用的skynet接口: * 输出错误信息: skynet.e
阅读全文
摘要:前言: 之前从Skynet启动过程,解读了skynet的启动部分C语言编写的底层源码 Skynet服务器框架(二)C源码剖析启动流程,最后成功启动了引导的lua服务bootstrap.lua,接下来我们要尝试自定义一个lua服务,并让它启动起来。 bootstrap实现功能: bootstrap.l
阅读全文
摘要:Mac os x下安装sky net: 安装: 相比于Linux系统,Mac系统下安装skynet显然要简单得多,打开Mac的终端,大致步骤如下: 先检查本地是否已安装了git工具,假如已经安装: bogon:~ linshuhe$ git --version git version 2.8.1 1
阅读全文
摘要:引言: 之前我们已经完成了在Linux下配置安装 skynet 的环境,并成功启动了 skynet 服务框架,为了从底层更好地理解整个框架的实现过程,我们有必要剖析一下源码,由于底层的源码都是用C语言写的,lua脚本基本是用来进行业务层开发,所以我们从C源码开始解读框架。打开下载包的 skynet-
阅读全文
摘要:根据云风博客的描述,Skynet 的核心功能就是解决一个问题: 把一个符合规范的 C 模块,从 动态库(so文件)中启动起来,绑定一个永不重复(即使模块退出)的数字id做为其 handle。模块 被称为 服务(Service),服务间可以自由发送消息。 每个 模块 可以向 Skynet 框架注册一个
阅读全文

浙公网安备 33010602011771号