如何在 OpenResty 中使用 websocket

前言

作为一个游戏从业者不可能不使用推方案,以前一直使用 nginx-push-stream-module 这个模块的 Forever Iframe 模式来实现推方案。

最近决定研究下 lua-resty-websocket 来实现一个更加高效好用推方案

不推荐使用的场景

由于 OpenResty 目前还不能做到跨 worker 通信,所以想到实现指定推送需要中转一次,效率上可能不如其他语言如 golang

  • 过于复杂的业务逻辑
  • 频繁的指定推送(单对单、组、Tag等)
  • 广播过多

Read More

如何在openresty里解析域名

为什么我们的域名不能被解析

最近经常有朋友在使用一个域名地址时发现无法被正确解析

比如在使用Mysql实例时某些云会给一个私有的域名搭配自有的nameserver使用

1
2
3
4
5
6
7
8
local client = mysql:new()
client:connect({
host = "rdsmxxxxxx.mysql.rds.xxxx.com",
port = 3306,
database = "test",
user = "test",
password = "123456"
})

以上代码在直接使用时往往会报一个无法解析的错误。那么怎么在openresty中使用域名呢

Read More

如何在openresty里使用luarocks库

前言

目前游戏中有一个需要传送大量点数据来表示一个地图的需求

做了简单测试,如果要以文本传送512*512的地图数据大小为20KB左右

我想了一个办法把数据写到图片的一个像素中,以不同的颜色来代表类型和地形

然后通过base64同样尺寸的jpeg图片,在100%质量的情况下只有8kb的大小

Read More

OpenResty的大时代已经来临

序言

趁着锤子科技宣布要把门票收入捐给 OpenResty 社区建设的大事件的热潮还在。
我也想写写我和 OpenResty 的前世今生。

2012初识 OpenResty,开发第一个游戏项目。
2015结识 OpenResty 社区发起者,并以第3名的好成绩率先加入 Openresty 技术交流 QQ群。

还记得360公司小伙伴在 GoogleGroups 说发起了一本叫 OpenResty最佳实践 的书。https://github.com/moonbingbing/openresty-best-practices
当时我的心情是复杂的,孤独在路上奋斗了3年,突然找了组织,那种心情无以言表。

楼下的让一让,我要开始装逼了!

Read More

cron触发sendmail&postdrop之后引发系统资源枯竭

事情的起因

同事告诉我我们线上一组游戏服进不去了,我查了一下错误日志,看到 Redis 服务报了以下错误

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. 
Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

以及 Redis 错误日志中的

1
2
3
4
5
6
7
8
[root@iZ232dbhg3uZ t2]# tail /data/data/t2/run.log 
[18727] 22 Dec 11:22:12.193 # Background saving error
[22817] 22 Dec 11:22:18.016 # Failed opening .rdb for saving: No space left on device
[18727] 22 Dec 11:22:18.107 # Background saving error
[22823] 22 Dec 11:22:24.029 # Failed opening .rdb for saving: No space left on device
[18727] 22 Dec 11:22:24.121 # Background saving error
[22828] 22 Dec 11:22:30.047 # Failed opening .rdb for saving: No space left on device
[18727] 22 Dec 11:22:30.134 # Background saving error

Read More

php mysql pconnect

当 PHP 在 FastCGI 模式下运行时,如果需要使用 pconnect() 连接 MySQL 服务,那么最好设置 PHP FastCGI PHP_FCGI_CHILDREN << MySQL max_connections,并且加大 php-fpm 的 pm.max_requests。源于下面的分析……

永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP 将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。
对 web 服务器的工作和分布负载没有完全理解的读者可能会错误地理解永久连接的作用。特别的,永久连接不会在相同的连接上提供建立“用户会话”的能力,也不提供有效建立事务的能力。实际上,从严格意义上来讲,永久连接不会提供任何非永久连接无法提供的特殊功能。

Read More

获取Root权限的钩子

有时候我们维护一些服务需要用到root权限这个时候如果你是非Root该怎么办呢

以前公司的做法是给维护人员开普通用户,个别命令会调用一个钩子拿到root权限在去执行

代码寥寥无几

Read More