杂谈
2026-03-27
ai的好处着实太大
每次提交代码前让ai 审核代码。甚至有个想法定期让ai审核指定范围内提交的代码
写测试用例驱动ai实现逻辑。特别是实现正则表达和业务算法。
技术栈横向扩展,让ai辅助我学习。一对一知识问答,比起之前网上搜索乱七八糟的信息,高效太多!
辅助阅读底层源码。搜索/接口/使用调用关系。
ai代码
我每天高频与ai chat,从个人感觉上,生成一小段局部问题的代码ai准确率很高。但在解决稍微大一点的需求问题,我是不敢用ai生成,因为生成代码越多,我审核代码的负担也增大,在试过几次准确率不高,我不再去尝试。干脆先拆解问题+自己写。
所以,纯人个感觉。我认为ai做稍微大一丢丢的、需要确定性的问题,不靠谱!
网上号称agent生成软...
Click to read more ...
locust系列-延时定义user.tasks
版本:locust==2.32.1
locust系列
locust 要求压测逻辑定义在 User.tasks 类变量中。对于基于 TCP 长连接的游戏项目来说,这种方式并不适用。因为只有在角色登录成功并返回角色数据后,压测逻辑才能根据业务数据状态发起请求。
locust 如时使用 user.tasks
在 locust==2.32.1 源码中,首次使用 task 的流程如下:
Runner.spawn_users() - 第215行调用 new_user.start(self.user_greenlets)
User.start() - 第188行通过 group.spawn() 启动 greenlet
run_user() - 内部函数,第186行调用 user.run()...
Click to read more ...
locust系列-开篇
我用 locust 为游戏项目实现了一个压力测试工具。
在着手开发之前,我曾怀疑 locust 能否胜任游戏服务器的压测。因为无论是官方示例还是网上能搜到的资料,绝大多数都集中在 Web 压测上,几乎找不到关于二次开发或针对特定协议编写压测逻辑的内容。
编写压测逻辑时,可以直接使用 locust 内置的 TaskSet 和 SequentialTaskSet。但游戏项目通常会自定义网络层:例如采用 TCP 长连接而非 HTTP,使用自定义的数据格式而非 JSON/XML,异步请求而非同步。这些场景都需要在 locust 的基础上进行二次开发。
在实际实现过程中,网上能参考的资料非常有限。我遇到问题时,首先查阅 locust 的官方文档,如果文档中没有涉及,就去翻看对应的源码和ai...
Click to read more ...
skynet我的一种lua代码组织方式
请注意本文讨论的是Lua代码的目录组织而非C代码
之前参与的几个项目都是直接以origin/skynet作为工程根目录。但当在创建新工程时,我开始思考工程目录结构的问题。
此前,为了更加方便,我给debug_console的性能参数增加排序功能
但我不想直接修改原有代码,也不希望在内网维护修改后的skynet分支。
基于搜索优先级,加载lua代码
假设此时我有另外一份debug_console代码放在./app/service/debug_console.lua。根据启动config和https://github.com/cloudwu/skynet/blob/master/lualib/loader.lua#L11,只需将./app/service在luaservice选项...
Click to read more ...
skynet定制加载loader
经历了好几个skynet项目,有些项目细节很适合在lualib/loader.lua里实现
区分service是skynet内置的还是游戏项目新建的
针对游戏项目新建的service在newservic成功后,有额外的初始化工作
记录这些地址,后续广播消息用
skynet.dispatch额外需要的消息协议
当然,针对前两项是可以在项目早期对skynet.newservice包装一层新接口实现,并规范项目成员使用新接口myapp.newservice
function myapp.newservice(name, ...)
local addr = assert(skynet.newservice(name, ...
Click to read more ...
skynet sharetable.loadtable相同引用table会深复制
部分策划配置表,会在后端代码运行期间进行二次转换。比如,抽卡以池子类型drawType字段和消耗货币costCurrencyType区分业务逻辑,而它们定义在同一张表draw.lua
local datas = {
{id = 1, drawType = 1, costCurrencyType = 1, ...}
{id = 2, drawType = 1, costCurrencyType = 2, ...}
{id = 3, drawType = 2, costCurrencyType = 1, ...}
{id = 4, drawType = 3, costCurrencyType = 1, ...}
{id = 5, drawType = 3, costCurrenc...
Click to read more ...
git hook进行luacheck
git hook
参考官方git hook文档,使用pre-commit钩子可以在提交前可对代码进行检查。以下让ai总结各个钩子的说明和例子
客户端钩子 (本地开发使用)
钩子名称
触发时机
作用描述
具体使用例子
pre-commit
执行 git commit 后,编写提交消息前
检查即将提交的代码快照
运行 ESLint 检查、执行单元测试、检查代码中是否遗留了 console.log 或临时密钥。
prepare-commit-msg
默认消息创建后,编辑器启动前
自动生成或...
Click to read more ...