博客
theevolutionofLua 全文翻译
终于赶在春节前将论文全文翻译完,以后有时间将前面三章重新翻译一次,因为刚开始的时候没打算全文翻译的。。第一次每天花 25 分钟完成这么长的一篇翻译,证明滴水可以穿石,哈哈哈 中文地址:Lua 的演进 祝各位新春快乐,鸡年大吉,恭喜恭喜
终于赶在春节前将论文全文翻译完,以后有时间将前面三章重新翻译一次,因为刚开始的时候没打算全文翻译的。。第一次每天花 25 分钟完成这么长的一篇翻译,证明滴水可以穿石,哈哈哈 中文地址:Lua 的演进 祝各位新春快乐,鸡年大吉,恭喜恭喜
2016 年终总结
今年写了 14 篇博客,比去年的 18 篇要少,没有什么新技术,有点遗憾。倒是读了几篇好文章,比如 Linkedin 团队分享的 The Log,还有 The evolution of Lua。看了一下去年的 年终总结 ,发现目标基本都没完成。゚ヽ (゚Д`)ノ゚。 只有坚持博客这点算是完成了。关于 TCP/IP 协议,其实很想就 Google 家的 BBR 写一篇短文,等下试试。建站这点完全提不起动力,买了域名和 VPS 之后,就搭了个 Google 网页代理就算了。。 2016 是第一次感觉 …
今年写了 14 篇博客,比去年的 18 篇要少,没有什么新技术,有点遗憾。倒是读了几篇好文章,比如 Linkedin 团队分享的 The Log,还有 The evolution of Lua。看了一下去年的 年终总结 ,发现目标基本都没完成。゚ヽ (゚Д`)ノ゚。 只有坚持博客这点算是完成了。关于 TCP/IP 协议,其实很想就 Google 家的 BBR 写一篇短文,等下试试。建站这点完全提不起动力,买了域名和 VPS 之后,就搭了个 Google 网页代理就算了。。 2016 是第一次感觉 …
《The Evolution of Lua》翻译 part2
Lua2 1990 年的时候,面向对象迈向巅峰,对于 Lua 没有面向对象的支持,我们受到了很大的压力。我们不想将 Lua 变成面向对象,因为我们不想 “ 修复 ” 一种编程范式(fix a programming paradigm)。特别是,我们不觉得 Lua 需要将对象和类作为基础语言概念,我们觉得可以透过 table 来实现(table 可以保存方法和数据,因为函数是第一类对象)。直到今天,Lua 也没有强加任何对象和类模型给用户,我们初心不变。很多用户建议和实现了面向对象模型;面向对象也 …
Lua2 1990 年的时候,面向对象迈向巅峰,对于 Lua 没有面向对象的支持,我们受到了很大的压力。我们不想将 Lua 变成面向对象,因为我们不想 “ 修复 ” 一种编程范式(fix a programming paradigm)。特别是,我们不觉得 Lua 需要将对象和类作为基础语言概念,我们觉得可以透过 table 来实现(table 可以保存方法和数据,因为函数是第一类对象)。直到今天,Lua 也没有强加任何对象和类模型给用户,我们初心不变。很多用户建议和实现了面向对象模型;面向对象也 …
《The Evolution of Lua》读书笔记 1
lua 的优点: * 可移植性 * 容易嵌入 * 体积小 * 高效率 这些优点都来自于 lua 的设计目标:简洁。从 Scheme 获得了很多灵感,包括匿名函数,合理的语义域概念 lua 前身: 巴西被禁运,引入计算机软件和硬件受限,巴西人有强烈的民族情绪去创造自己的软件。三名作者都是同一个实验室 Tecgraf 的,这个实验室与很多工业实体有合作关系。成立的头十年,重点是创造交互性的图形软件,帮助合作伙伴进行设计。巴西石油公司是其中一个重要伙伴。有大量的遗留数据需要处理。于是诞生了 DEL,一 …
lua 的优点: * 可移植性 * 容易嵌入 * 体积小 * 高效率 这些优点都来自于 lua 的设计目标:简洁。从 Scheme 获得了很多灵感,包括匿名函数,合理的语义域概念 lua 前身: 巴西被禁运,引入计算机软件和硬件受限,巴西人有强烈的民族情绪去创造自己的软件。三名作者都是同一个实验室 Tecgraf 的,这个实验室与很多工业实体有合作关系。成立的头十年,重点是创造交互性的图形软件,帮助合作伙伴进行设计。巴西石油公司是其中一个重要伙伴。有大量的遗留数据需要处理。于是诞生了 DEL,一 …
《一个 Go 程序系统线程暴涨的问题》结论
原文地址:https://zhuanlan.zhihu.com/p/22474724 作者的结论没写好,我来说两句。。
原文地址:https://zhuanlan.zhihu.com/p/22474724 作者的结论没写好,我来说两句。。
空中换心
最近一周在做一件非常刺激的事情,刺激到不想再干第二遍了 T_T。。。还有一个月就要内测的时候,换掉服务器架构,而且还要同时做需求,无异于对空中的飞机换引擎啊 8 月末的时候,老大开了个会,服务器架构要重构一下,将以前的逻辑分服改成物理分服。之前的架构里,开新服很简单,但因为是大服结构,任何一个逻辑服挂了,都会影响其他服的玩家,隔离性不够高。同时,做单服的服务时,处理逻辑需要考虑不同服的影响,添加了额外的心智负担,不容易做对。于是,架构决定改成这样: 每个 game 是一个进程,这样任意 game …
最近一周在做一件非常刺激的事情,刺激到不想再干第二遍了 T_T。。。还有一个月就要内测的时候,换掉服务器架构,而且还要同时做需求,无异于对空中的飞机换引擎啊 8 月末的时候,老大开了个会,服务器架构要重构一下,将以前的逻辑分服改成物理分服。之前的架构里,开新服很简单,但因为是大服结构,任何一个逻辑服挂了,都会影响其他服的玩家,隔离性不够高。同时,做单服的服务时,处理逻辑需要考虑不同服的影响,添加了额外的心智负担,不容易做对。于是,架构决定改成这样: 每个 game 是一个进程,这样任意 game …
阅读分享:游戏服务器的设计与面向日志的工作流
7 月的工作平淡无奇,除了 X 系统由借鉴 A 游戏改成借鉴 B 游戏,就没什么了,还是谈点别的吧。 最近看了 《游戏服务器端究竟解决了什么问题》,推荐给大家。作者关于烂框架的分析很有趣,框架定义角色时,不恰当的角色划分,会引起额外的复杂度,作者文章中后部分有分析。 作者对服务器消息流通的分析,相当见功力。游戏的服务器端,可以抽象的看成消息的生产者和消费者的集合。每一个生产者 / 消费者,就是一个服务。skynet 的优势,在于提供了服务这个封装,一组功能相对独立的逻辑,可以组合在一个服务内,通 …
7 月的工作平淡无奇,除了 X 系统由借鉴 A 游戏改成借鉴 B 游戏,就没什么了,还是谈点别的吧。 最近看了 《游戏服务器端究竟解决了什么问题》,推荐给大家。作者关于烂框架的分析很有趣,框架定义角色时,不恰当的角色划分,会引起额外的复杂度,作者文章中后部分有分析。 作者对服务器消息流通的分析,相当见功力。游戏的服务器端,可以抽象的看成消息的生产者和消费者的集合。每一个生产者 / 消费者,就是一个服务。skynet 的优势,在于提供了服务这个封装,一组功能相对独立的逻辑,可以组合在一个服务内,通 …
六月小结
六月的最后一天,解决了一个服务死循环的问题。吐槽下 skynet,既然已经可以检测到 endless loop,为什么不直接做个调试器去打出死循环在哪里?而且默认不自带超时功能,死了以后基本上服务统计的 gm 指令都挂了。要做超时的 call,还需要自己套个代理服务上去。 这个月将手头的系统都开发完了,开始进入修 bug 阶段。月中的时候接替同事,跟了一下玩法方面的代码,熟悉了玩法的代码结构。排行榜现在统一交到一个服务上去做了,这个服务会创建跟玩家一一对应的 role,然后每个 role 还能饰 …
六月的最后一天,解决了一个服务死循环的问题。吐槽下 skynet,既然已经可以检测到 endless loop,为什么不直接做个调试器去打出死循环在哪里?而且默认不自带超时功能,死了以后基本上服务统计的 gm 指令都挂了。要做超时的 call,还需要自己套个代理服务上去。 这个月将手头的系统都开发完了,开始进入修 bug 阶段。月中的时候接替同事,跟了一下玩法方面的代码,熟悉了玩法的代码结构。排行榜现在统一交到一个服务上去做了,这个服务会创建跟玩家一一对应的 role,然后每个 role 还能饰 …
忙忙忙
最近都在加班,没什么好写的。每周六天,没事也要过来,有点崩溃。 邮箱、聊天之类的都做成信道,尽量和数据抽离开,由具体系统处理对客户端的数据转换,但是 orm 那块不够灵活。如果不走 orm,担心数据格式不对,直接用字符串保存的话,又丢了格式,以后运营的时候不好查找数据。 玩法堆了几个,成长系统比较多,光英雄的就堆了 5、6 个了。战斗力计算没时间去理清,虽然都是简单的读表处理,但是各个系统之间有交互,不知道现在这套接口够不够灵活,会不会坑爹。另外,还有一些 buff 之类的,一直只有客户端维护, …
最近都在加班,没什么好写的。每周六天,没事也要过来,有点崩溃。 邮箱、聊天之类的都做成信道,尽量和数据抽离开,由具体系统处理对客户端的数据转换,但是 orm 那块不够灵活。如果不走 orm,担心数据格式不对,直接用字符串保存的话,又丢了格式,以后运营的时候不好查找数据。 玩法堆了几个,成长系统比较多,光英雄的就堆了 5、6 个了。战斗力计算没时间去理清,虽然都是简单的读表处理,但是各个系统之间有交互,不知道现在这套接口够不够灵活,会不会坑爹。另外,还有一些 buff 之类的,一直只有客户端维护, …
回炉重铸 - 设计模式的领悟
整个四月都在回炉重造之前的英雄成长系统,就因为决定换一个方向,累死。回头看看去年,没想到也是 4 月 30 号写的博客。。。 重造的过程里,同时在看《head first 设计模式》这本书。作者加了很多有趣的插图进去,以前是很讨厌这么做作的书,但是现在读来觉得没那么累,挺好的,可能是老了吧。。。里面提到的开放 - 封闭原则很有启发意义。以前写代码,写的很老实,不够偷懒,总是一字一句把策划的文案搬进去,抽象层次不够,搞的人很累。开放 - 封闭原则就教导,写代码应该对扩展开放,以后策划有新需求,只要 …
整个四月都在回炉重造之前的英雄成长系统,就因为决定换一个方向,累死。回头看看去年,没想到也是 4 月 30 号写的博客。。。 重造的过程里,同时在看《head first 设计模式》这本书。作者加了很多有趣的插图进去,以前是很讨厌这么做作的书,但是现在读来觉得没那么累,挺好的,可能是老了吧。。。里面提到的开放 - 封闭原则很有启发意义。以前写代码,写的很老实,不够偷懒,总是一字一句把策划的文案搬进去,抽象层次不够,搞的人很累。开放 - 封闭原则就教导,写代码应该对扩展开放,以后策划有新需求,只要 …
pythonsproto 支持 64 位有符号整数
小伙伴需要 64 位整数做物品的 id,之前 python sproto 的判断有问题,写篇日志记录一下。 之前有问题的代码是这样的: if (!PyInt_Check(data)) { PyErr_SetObject(SprotoError, PyString_FromFormat("type mismatch, tag:%s, expected int", tagname)); return -1; } long i = PyInt_AsLong(data); int vh = i >> …
小伙伴需要 64 位整数做物品的 id,之前 python sproto 的判断有问题,写篇日志记录一下。 之前有问题的代码是这样的: if (!PyInt_Check(data)) { PyErr_SetObject(SprotoError, PyString_FromFormat("type mismatch, tag:%s, expected int", tagname)); return -1; } long i = PyInt_AsLong(data); int vh = i >> …
pysprotobug 修复
最近,找隔壁组的同学测试了一下我的 pysproto,他们提了很多有益的建议,非常感谢。 在测试中,出现了一次诡异的 coredump。当数据变大的时候,就有很大的机率遇上 double free。在 sproto 和 python sproto 插件里插了一堆打印点后,发现 sproto 在解包的时候报错了。但是 unpack 的代码相当简单,下意识忽略过去了。找云大侠看了一下数据,发现的确有个长度数据错了。至于是在哪一层出错了,还是要再找找。接着我们尝试了直接用 lua 版的 sproto …
最近,找隔壁组的同学测试了一下我的 pysproto,他们提了很多有益的建议,非常感谢。 在测试中,出现了一次诡异的 coredump。当数据变大的时候,就有很大的机率遇上 double free。在 sproto 和 python sproto 插件里插了一堆打印点后,发现 sproto 在解包的时候报错了。但是 unpack 的代码相当简单,下意识忽略过去了。找云大侠看了一下数据,发现的确有个长度数据错了。至于是在哪一层出错了,还是要再找找。接着我们尝试了直接用 lua 版的 sproto …