详解 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
全排列问题给定 n 个不同的元素, 问有多少种不同的排列方式. 这就是全排列问题. 我们高中时就学过排列公式 \(A_n^m = \frac{n!}{(n-m)!}\), 因此对于 n 个元素, 全排列数等于 \(A_n^n = \frac{n!}{(n-n)!} = n!\) . 例如对于序列 [1, 2, 3] 全排列为 123456[1, 2, 3][1, 3, 2][2, 1, 3][2, 3, 1 September 5, 2020 #algorithms #leetcode
只出现一次的数字这里分享三道寻找数组中只出现一次的数字的问题. 这些题使用哈希表都很好做, 但这里我们使用位运算, 可以很巧妙地在常数空间复杂度内解决问题. 第一题 题目源自 Leetcode 136 题 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 12输入: [2, August 28, 2020 #algorithms #leetcode
[翻译] RFC 1928: SOCKS 协议第 5 版socks5 是一个常用的代理协议, 它既可以用来代理 TCP, 也可以代理 UDP. socks5 的用途非常广泛, 许多网络软件都支持 socks5, 主流操作系统也支持使用 socks5 作系统代理. RFC 1928 是 socks5 协议的规范文档, 本文是对 RFC 1928 的翻译. 原文见 RFC 1928 - SOCKS Protocol Version 5. 以下是翻译正文: August 27, 2020 #translations
Y-Combinator: 如何在匿名函数中递归调用自身如何实现一个阶乘函数? 最简单的做法是使用递归: 123456789'use strict';function factorial(n) { if (n === 0) { return 1; } else { return n * factorial(n - 1); }} August 8, 2020 #math