在上一次游戏测试中,因为用了新的机器,并且从 ansible 切换到了 salt stack,其中 nofile 相关的配置步骤漏掉了,结果所有进程的 nofile 限制是默认的 1024。结果就是当在线人数达到一定数据之后,出现大量 lua 找不到文件的错误,导致后来的玩家没法登录,已经在线的玩家也没法正常游戏。

开发服务端程序,nofile 是很重要的配置。它限制了一个进程最多能够打开的文件数量。对于高并发的服务,每个连接都会打开一些文件,尤其是使用像 Lua 这样的脚本语言,更是要打开大量的文件。

当前的限制可以使用 ulimit -a 查看。

要修改也比较简单,以 Ubuntu 为例,最简单的就是修改 /etc/security/limits.conf,在该文件中添加下面内容即可,不需要重启,新创建的进程会使用新的配置。

* hard nofile 1000000
* soft nofile 1000000

一图胜千言,通过截图加标注能够很直白的说明问题。不过有时候会碰到标注很多很复杂的情况,比如针对截图对 UI 或者游戏系统进行分析,这个时候结合思维导图就比较方便了。

OmniGraffle 是个图表绘制和图表绘制工具。通过结构化编辑,和自动图表风格,也可以作为思维导图工具。而使用锚点编辑的连接功能 ,可以在图片的对应位置上使用引导线来引出各个主题。

我写了不少 macOS 脚本来自动化我的工作。这个脚本可以是用的最多的。我用它来在各种 App 中,将当前选中的对象做为任务添加到 OmniFocus 中。通过捕获的链接可以在 OmniFocus 中直接打开相关的文档。

Vcpkg 是微软推出的用于在 Windows 上管理 C/C++ 库的工具。通过它能够方便的安装常用的 C/C++ 库,而且提供了 CMake 的集成。这使得使用 CMake 的项目在 Windows 下构建方便了很多,不需要自己手动去指定在 Windows 下如何找到依赖的库了。

不过实际使用中还是碰到一些问题。为了减少依赖,直接复制一个可执行程序就能在其它机器上运行,经常会需要静态链接依赖的库。而在 Windows 上使用 vcpkg 静态链接需要一些特殊的操作。

Concourse CI 是个很不错的开源持续集成工具,安装和上手都相当简单。如果没有在用 Gitlab 又想自己架设 CI 服务的话是个不错的选择。

Concouse CI 提供了 Docker 镜像,部署起来相当方便。不过可能会踩到一些坑。

公司主要用 skynet 和 cocos2d-x Lua 来开发游戏。两者都采用了嵌入 Lua 来开发。因为性能,要和原生代码交互等原因,需要在 Lua 和其它语言之间进行交互。最近做了挺多这样的工作,积累了一些心得,会陆续总结分享出来。

这一篇是 Lua C API 的简单介绍。

Shenzhen IO 是款很小众的游戏,某国同学发现自己的国家很难去制造什么东西,所以来到了深圳加入了一家电子公司 “深圳龙腾科技有限公司”。游戏中你将扮演这位同学,使用公司的各种芯片,设计电路板,烧入汇编语言来实现各种需求。

游戏的特色就是高仿真,整个游戏基本上就是一个 CAD 系统,只要按规范生成出那些芯片就真能生成出各种板子了,接上机床就可以开始量产了。同时也是不错的熟悉单片机设计,汇编语言的培训工具。

另外选取的需求也挺有趣,都是真实、有用的。比如植物自动浇水,控制三明治机器等等。

而且这是款可以光明正大玩的游戏,因为看起来你真的就是在工作。

在服务器上有时候需要安装一些软件,但是下载地址被 GFW 给墙了。手上只有 Shadowsocks 可以用,所以研究了下怎么在服务器上用起来。只需要用到 Shadowsocks 的命令行客户端启动一个 SOCKS 代理,然后用 polipo 转化成 HTTP 代理,就可以通过环境变量 http_proxyhttps_proxy 在命令行中使用代理了。