最新 | 最热门 | 最高评价

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

Tag: skynet
云风 发于 2017年03月25日 15:49 | 点击: 177 | 展开摘要
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 | 点击: 327 | 展开摘要
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 | 点击: 355 | 展开摘要
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 | 点击: 371 | 展开摘要
今天在 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 | 点击: 370 | 展开摘要
经历了 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

+0  skynet 的一个简单范例

Tag: skynet
云风 发于 2016年07月01日 12:51 | 点击: 391 | 展开摘要
之前已经介绍过,skynet 只是一个轻量框架,不是一个开箱即用的引擎。能不能用好它,取决于使用者是否清楚知道自己要干什么,如果是用 skynet 做网络游戏服务器,那么就必须先知道网络游戏服务器应该如何设计。

在 skynet 发布版中带的 example 中,有类似 gate watchdog agent 之类的服务,它们并不是唯一的用 skynet 构建游戏服务器的模式。我想另外写一个范例,示范依旧基于 skynet 但用不同的模式构建游戏服务器的方法。

我花了两天

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

+0  正确的序列化 Lua 中带元表的对象

Tag: lua与虚拟机 | skynet
云风 发于 2016年06月23日 22:00 | 点击: 424 | 展开摘要
在 Lua 5.2 之后的版本,约定了在元表中可以给出一个 __pairs 方法,而 lua 的基础库 pairs 会使用这个元方法来迭代一个对象。

Lua 5.3 之后的版本,取消了 lua 5.2 中的 __ipairs 约定,而统一使用 lua_geti 来访问整数为索引的数组。

可惜的是,许多 lua 序列化库对此支持的并不好。今天我在改进 bson 的序列化库时,重新考虑了这个问题,看看这个序列化过程怎么做,才能更好的支持 lua 5.3 以后的约定。

在 s

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

+0  skynet 入门指南

Tag: skynet
云风 发于 2016年06月07日 15:43 | 点击: 397 | 展开摘要
随着 lua 5.3.3 的正式发布,我不想再拖了,希望下周就完全冻结 skynet 1.0 的 rc 版本,正式发布。

鉴于 skynet 一直都没有专门的上手指南,过去写的 skynet 设计综述 太老,之后 skynet 又有了很大的变化,所以我想是时候补一篇面向刚接触 skynet 的同学的文章了。

我在 wiki 上补充了一篇 GettingStarted ,欢迎大家多提意见。特别是没有接触过 skynet 又有兴趣的同学,可以看看这篇文章是否讲清楚了 skyn

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

+0  代理服务和过载保护

Tag: skynet
云风 发于 2016年05月13日 13:36 | 点击: 417 | 展开摘要
在 skynet 中,有时候为一个服务实现一个前置的代理服务是很有必要的。

比如,你希望对这个服务发起的请求是支持超时的,就不必在功能实现的服务中实现,那样会增加无谓的复杂性。你可以在功能实现的服务前加一个代理服务,当超时发生时,通知请求方。关于这个实现,我在 blog 中给过一个示例。

同理,当你需要做一些负载均衡的处理的时候,也可以做一个代理服务,让请求分摊到多个可以完成类似功能的服务中去,实现比较简单,本文就不展开了。

今天想谈一下怎么利用代理服务更好的为一些热点

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

+0  skynet 服务的沙盒保护

Tag: skynet | 调试
云风 发于 2016年05月07日 10:20 | 点击: 393 | 展开摘要
昨天我们新的 MMO 游戏第一次上线小规模测试,暴露了一些问题。

服务器在开服 3 小时后,突然内存暴涨,CPU 占用率提升不多。当时 SA 已经收到报警邮件,但刚巧在午餐时间,而游戏功能还正常,耽误了半个小时。处理不够及时,导致在最终没有能收集到足够在线数据前,服务器已不能正常操作。另外,忘记配置 core dump 文件输出是另一个原因。

在最后几分钟,我们收集到一些信息:某个 lua 服务陷入 C 代码中的死循环,在 skynet 控制台发 signal 无法中断它

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

+0  重载一个 skynet 中的 lua 服务

Tag: skynet
云风 发于 2016年03月23日 23:51 | 点击: 385 | 展开摘要
今天有同事问到,能不能不关闭 skynet 进程,直接重新加载一个 lua 服务。

简单的回答的不能。如果要详细回答,并非完全不行,但这个需求需要使用 skynet 的人自己定制出来。

其实,这涉及服务的热更新问题。由于 lua 的函数是 first class 对象,所以,它即好做热更新,又无法做成业务完全无关的。

容易做的一方面在于,lua 函数本身就是一个对象,只要你找到 lua vm 里的需要更新的函数对象被哪些地方应用,就可以生成(通过 load 新的脚本代码

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

+0  在 skynet 中处理 TCP 的分包

Tag: skynet
云风 发于 2016年03月21日 17:52 | 点击: 444 | 展开摘要
skynet 的核心并没有规定怎样处理 TCP 的数据流,但在开发网络游戏时,我们往往需要按传统,把 TCP 连接上的数据流分割为一个个数据包。

将数据流转换为数据包,比较常见的做法是给数据包加一个长度信息,组装在数据流中。我个人比较推荐使用两个字节表示包长度。在 skynet 中提供了一个 GateServer 的模板来帮助用户实现这样一个网关。

这个网关模板采用推送的模式,一旦用户初始化完毕,就会自动分割连接上的数据流,按协议(两字节长度加内容)分割为数据包,回调处理

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