最新 | 最热门 | 最高评价

+0  日程表服务

Tag: skynet
云风 发于 2017年09月07日 15:48 | 点击: 775 | 展开摘要
skynet 的用户中,问的比较多的一个问题是,为什么我改了系统时间对 skynet 却没有生效?继续追问发现,有这个需求的人大多是想实现一个日程表,到某个特定时间触发特定的任务,修改系统时间是为了测试。

不得不说,通过修改系统时间来测试是个直接、却很糟糕的主意。skynet 的定时器也不依赖系统时间驱动,修改系统时间自然也不会生效。

日程服务是个普遍的需求。在国内网游里,你要不做什么节日任务、每周副本,基本不可能上线。这篇 blog 就谈谈这类需求应该在 skynet

查看全文: http://www.udpwork.com/item/16410.html

+0  skynet 1.1

Tag: skynet
云风 发于 2017年07月18日 14:59 | 点击: 429 | 展开摘要
拖了好多天,终于决定发布 skynet 1.1 了。

距上次计划做这件事 ,除了零星的 bugfix ,还多了一些比较大的变动。

skynet 的 lua 模块全部加上了 skynet 前缀,部分数据库 driver 放到了 skynet.db 下。如果需要兼容 1.0 的路径,可以在 config 中配置 lualib/compat10 这个目录。

网络线程针对有大量写操作的应用做了很大的优化 ,在一个 实际案例 中提高了 3.5 倍的效率。

增加了一个叫做 Dat

查看全文: http://www.udpwork.com/item/16351.html

+0  skynet 网络线程的一点优化

Tag: skynet
云风 发于 2017年06月19日 19:59 | 点击: 469 | 展开摘要
skynet 是一个注重并行业务处理的框架,设计它的初衷是可以充分利用多核 CPU 更好的处理那些比较消耗 CPU 的,天然可以并行的业务,比如网络游戏。网络 I/O 并不是优化重点。

基于这个设计动机,skynet 的网络层使用单线程实现。因为我认为,即使是代码量稍大一些的单线程程序,也会比代码量较小的多线程程序更容易理解,出 bug 的机会也更少。而且经典的网络服务程序,如 redis nginx 并没有因为单线程处理网络 IO 而变现得不堪,反而有不错的口碑。

所以

查看全文: http://www.udpwork.com/item/16310.html

+0  sharedata 的替代品:datasheet

Tag: skynet
云风 发于 2017年06月06日 16:45 | 点击: 466 | 展开摘要
skynet 中有一个用来在多个服务间共享数据表的模块,叫做 sharedata 。

它的设计动机是:当我们有很多服务时,如果需要共享一份只读的数据表,把数据表分别在每个服务类加载会很浪费内存。而且,一旦数据表有热更新的需求,分散在多个服务中的数据更新起来会比较麻烦。

我试过很多方案来达成这个需求,一直都不是特别满意。目前的 sharedata 模块是用的最久、使用项目最多的一个。虽然它基本可用,但使用它的同学也提出了一些问题,我对这些问题做了一些思考。

首先、它其实并

查看全文: http://www.udpwork.com/item/16293.html

+0  skynet 模块命名空间调整

Tag: skynet
云风 发于 2017年06月03日 21:58 | 点击: 620 | 展开摘要
前段时间有同学抱怨说 skynet 下提供的 lua 模块都没有名字空间,平坦的命名,容易和自己项目开发的模块命名冲突。虽然自己项目开发的模块可以单独给一个名字空间,但混杂在一起使用还是不美观。

我考虑了几天,决定在 skynet 1.1 版本中把大部分的模块都加上 skynet 前缀。

调整的模块有:

cluster : skynet.cluster

crypt : skynet.crypt

datacenter : skynet.datacenter

dns

查看全文: http://www.udpwork.com/item/16288.html

+0  epoll 的一个设计问题

Tag: skynet | 调试 | 语言与设计
云风 发于 2017年05月28日 11:17 | 点击: 697 | 展开摘要
问题的起因是 skynet 上的一个 issue ,大概是说 socket 线程陷入了无限循环,有个 fd 不断的产生新的消息,由于这条消息既不是 EPOLLIN 也不是 EPOLLOUT ,导致了 socket 线程不断地调用 epoll_wait 占满了 cpu 。

我在自己的机器上暂时无法重现问题,从分析上看,这个制造问题的 fd 是 0 ,也就是 stdin ,猜想和重定向有关系。

skynet 当初并没有处理 EPOLLERR 的情况(在 kqueue 中似乎没

查看全文: http://www.udpwork.com/item/16280.html

+0  Lua 表的差异同步

Tag: lua与虚拟机 | skynet | 优化与技巧
云风 发于 2017年05月18日 20:10 | 点击: 473 | 展开摘要
最近同事碰到的一个需求:需要频繁把一组数据在 skynet 中跨网络传递,而这组数据实际变化并不频繁,所以做了大量重复的序列化和传输工作。

更具体一点说,他在 skynet 中设计了一个网关节点,这个网关服务可以负责把一条消息广播给一组客户端,每个客户端由内部的一个 uuid 串识别,而每条消息都附带有客户端 uuid 列表。而实际上这些 uuid 列表组有大量的重复。每条广播消息都重复打包了列表组,且列表组有大量重复信息。

一开始我想的方法是专门针对这个需求设计一组协议

查看全文: http://www.udpwork.com/item/16269.html

+0  skynet cluster 模块的设计与编码协议

Tag: skynet
云风 发于 2017年03月25日 15:49 | 点击: 529 | 展开摘要
skynet 在最初的设计里,希望做一个分布式系统,抹平 actor 放在本机和处于网络两端的差别。所以,设计了 master/slave 模式。利用 4 个字节表示 actor 的地址,其高 8 位是节点编号,低 24 位是进程(节点)内的 id 。这样,在同一个系统中,不管处于哪个进程下,每个 actor (在 skynet 中被成为服务)都有唯一的地址。在投递消息时,无需关心目的地是在同一个进程内,还是通过网络来投递消息。

随后,我发现试图抹平网络和本地差异的想法不那

查看全文: http://www.udpwork.com/item/16188.html

+0  skynet 1.1 发布候选版本

Tag: skynet
云风 发于 2017年03月22日 11:23 | 点击: 1203 | 展开摘要
skynet 1.0 于 2016 年 8 月 1 日正式发布,到今天已经有 7 个多月了。这段时间积累了很多小修改,我想是时候发布 1.1 版了。

很高兴这段时间 skynet 社区继续壮大,有更多的公司选择基于 skynet 开发。

现打算在下个月以目前 github 仓库 master 分支为基础发布 1.1 正式版,这两周如果同学们还有什么问题请尽快提 issue 。

下面是从 1.0 开始积累的更新:

debug console : 可用户指定绑定 ip 。

查看全文: http://www.udpwork.com/item/16184.html

+0  sproto 的一些更新

Tag: skynet | 语言与设计
云风 发于 2017年03月14日 22:05 | 点击: 567 | 展开摘要
sproto 是我设计的一个类 google protocol buffers 的东西。

在很多年前,我在我经手的一些项目中使用 google protocol buffers 。用了好几年,经历了几个项目后,我感觉到它其实是为静态编译型语言设计的协议,其实并没有脱离语言的普适性。在动态语言中,大家都不太愿意使用它(json 更为流行)。一个很大的原因是,protobuffers 是基于代码生成工作的,如果你不使用代码生成,那么它自身的 bootstrap 就非常难实现。

查看全文: http://www.udpwork.com/item/16176.html

+0  在 skynet 中如何实现多 actor 协作的事务

Tag: skynet
云风 发于 2016年07月13日 18:27 | 点击: 467 | 展开摘要
今天在 qq 群中,有个同学问,在 skynet 中,如果多个 actor 需要协作时,能否有事务来保证一系列操作的过程中,状态不会被破坏。

他举了个例子:

如果有一段业务逻辑是:

local a = skynet.call(A, ...)
local b = skynet.call(B, ...)
if a and b then
dosomething()
end

如何保证 a and b 这个条件有效呢?也就是说,在第一行从 A 处获取状态后,还要向 B 查询

查看全文: http://www.udpwork.com/item/15670.html

+0  Skynet 1.0.0 发布

Tag: skynet
云风 发于 2016年07月11日 20:14 | 点击: 459 | 展开摘要
经历了 5 个 RC 版后,skynet 终于迎来了第一个正式发布版 1.0.0 。

目前这个版本基于 2012 年 7 月开始编写的代码,几乎从一开始就以开源模式发展。我们可以看到 2012 年 8 月 1 日在 github 上的第一次提交,到上周一正式版前的最后一次修改,已经过去了 4 年。

1403 次提交;

59 个代码贡献者;

3962 个 star ;

1850 个 fork ;

579 个邮件列表订阅者;

1700 个 qq 群成员。

我曾经在

查看全文: http://www.udpwork.com/item/15667.html
|<<<1234567>>>| 一共7页, 81条记录