自动生成 Lua 热更新代码游戏服务器使用 Lua 的一个重要原因是 Lua 便于热更. 即使服务器正在运行, 只需让它执行一段代码, 即可重写其中的某些函数, 达到热更新的目的. 例如模块 app 有一个函数 foo 1234567local M = {}function M.foo(a, b) return a + bendreturn M 如果我们要将 foo 热更成将 a 和 b 相乘, 只 February 5, 2021 #lua
由斜杠划分的区域一月份 Leetcode 的每日一题几乎都是并查集. 不过个人认为与状态转移方程千变万化的动态规划相比, 并查集还是相对比较简单的. 这道题是我觉得最有趣的两道之一 (另一道是打砖块, 以后有时间的话也写一篇它的题解). 题目源自 Leetcode 959 题 在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共 January 27, 2021 #algorithms #leetcode
Go 设置 socket 端口复用我们知道, 一般来说, TCP/UDP 的端口只能绑定在一个套接字上. 当我们尝试监听一个已经被其他进程监听的端口时, bind 调用就会失败, errno 置为 98 EADDRINUSE. 也就是所谓的端口占用. 12345678910int fd1 = socket(AF_INET, SOCK_DGRAM, 0);int fd2 = socket(AF_INET, SOCK_DGRAM, 0 January 24, 2021 #linux #go #network
2020 Annual SummaryAt the beginning of 2020, no one anticipated that we would face an unprecedented pandemic that would last a year or more. 2020 is unusual, to me, pandemic, new job, working, challenges, learning, voca January 1, 2021 #essays #english
详解 KCP 协议的原理和实现1. 引言 KCP 是一个快速可靠的 ARQ (Automatic Repeat-reQuest, 自动重传请求) 协议, 采用了不同于 TCP 的自动重传策略, 有着比 TCP 更低的网络延迟. 实际通常使用 KCP over UDP 代替 TCP, 应用在网络游戏和音视频传输中. KCP 的实现短小精悍, 非常适合学习. KCP 的 ARQ 机制与 TCP 类似, 只是部分策略不同, 学习 K December 9, 2020 #featured #network
Subsocks: 用 Go 实现一个 Socks5 安全代理笔者最近读完了 The Go Programming Language, 想写点东西练练手. Go 比较适合写服务器软件, 之前又学习了下 Socks5 协议, 于是决定写一个 Socks5 代理服务器. 目前基本功能已经完成, 部分思路参考了 ginuerzh/gost. 我给它起名为 Subsocks, sub- 意为在 … 之下 (类似于 “subway”). 项目 Repository 在 December 2, 2020 #tools #go
Printing parameters in Lua tracebackWhen an error occurs, Lua will print a traceback of the call stack, it helps us to find bugs. In many cases, however, a call stack traceback is not enough for us to find out the problem. We need more December 1, 2020 #lua #english
Lua 夏令时时区问题我之前的一篇文章介绍了怎样在服务器和客户端之间同步时间和时区. 同步时间相对简单些, 本质就是一个时间差; 而时区相对复杂些. 那篇文章介绍的方法有一个问题: 在客户端的时区启用了夏令时的时候, 客户端得到的本地时间会比实际快一个小时. 原因是求客户端时区的方法不对. 例如, 太平洋时区本为 UTC-0800, 而当客户端处于太平洋时区的 2020 年 10 月 29 日, 此时太平洋时区启用夏令 October 29, 2020 #experience #lua
Lua next 函数的一个有趣问题熟悉 Lua 的同学都知道, Lua 是允许在 for ... pairs 循环中修改和删除表中元素的. 下面这样的代码是没有任何问题的: 123456local t = {a = 1, b = 2, c = 3}for k, v in pairs(t) do if v == 1 then t[k] = nil endend 但是, 如果我们在遍历时既 October 23, 2020 #lua
A simple way to turn callback pattern to coroutine pattern in LuaMy game project is written by Lua. However, its framework does not provide a coroutine pattern, it uses a simple callback pattern instead. For example, to send an http request and receive the response September 13, 2020 #lua #english