返回首页
最新
我们是一家小型初创公司,正在构建一个专门的搜索引擎。刚开始时,逻辑很简单:“性能是我们的主要特点,所以我们需要使用C++。”
六个月过去了,运行时性能确实很出色,但我们的迭代速度却急剧下降。
感觉我们在每一个功能上都付出了巨大的代价。就在昨天,我花了整个下午与CMake斗争,只是为了链接一个库,而在其他生态系统中,这本可以通过一行命令(go get或npm install)轻松完成。我们还不断遇到一些虚幻的bug,结果发现是我们M1 Mac与Linux CI运行器之间的ABI微妙不匹配——这些问题在现代工具链中根本不存在。
这让人感到沮丧,因为我们的“慢”竞争对手每周都在推出新功能,而我们却被困在调试链接器错误或等待20分钟的清理构建中。
我开始怀疑“性能护城河”是否是一种陷阱。对于那些最近开始基础设施项目的人:你们还在坚持使用C++吗?还是转向了Rust或Go?或者你们只是接受了为了原始速度而牺牲迭代速度的现实?
1. 让他们继续交谈
2. 持续学习
3. 让他们付出代价
嗨,HN,我是Stefano,我刚刚推出了h00k.dev,这是一个专注于清晰性、隐私和实用开发工具的Webhook检查器。
它可以让你捕获和探索传入的Webhook,预览请求体(如JSON、图片、音频、视频等),检查请求头,解码JWT,并保存快照以便调试或分享。你还可以将请求转发到本地环境,并创建AI生成的模拟响应。
这个工具的开发源于我在调试分布式系统时,常常需要的不仅仅是一个基本的请求查看器。
期待听到你的想法!
我正在开发一款多人赛车游戏,但不断遇到相同的问题。状态不同步,导致玩家看到不同的位置;当两个玩家与同一个物体互动时出现竞争条件。这些都是常见的问题。
令人沮丧的是,这些错误只在多个真实玩家的情况下出现。在本地无法重现这些问题,无法轻松测试修复,而添加日志会改变时序,导致错误消失。
在不同项目中第三次重建网络代码后,我注意到一个问题:大多数多人游戏的错误源于对网络的思考,而不是游戏逻辑。
## 方法
在单人游戏中,你只需写:
```typescript
player.x += velocity.x;
player.health -= 10;
```
因此,我构建了 martini-kit,使多人游戏以相同的方式工作:
```typescript
const game = defineGame({
setup: ({ playerIds }) => ({
players: Object.fromEntries(
playerIds.map(id => [id, { x: 100, y: 100, health: 100 }])
)
}),
actions: {
move: (state, { playerId, dx, dy }) => {
state.players[playerId].x += dx;
state.players[playerId].y += dy;
}
}
});
```
就这样。没有 WebSockets,没有序列化,没有消息处理程序。martini-kit 自动处理状态同步、冲突解决、连接管理和消息排序。
## 工作原理
与其考虑消息,不如考虑状态变化:
1. 定义纯函数以转换状态
2. 一个客户端是“主机”,并运行权威的游戏循环
3. 主机广播状态差异(带宽优化)
4. 客户端修补其本地状态
5. 冲突默认为主机权威(可定制)
在这种模型下,竞争条件和排序错误在结构上是不可能的。
## 适用场景
- 回合制游戏、平台游戏、赛车游戏、合作游戏:效果良好
- 60Hz 刷新率的快节奏 FPS:尚不理想
- 包含 Phaser 适配器,Unity/Godot 适配器正在开发中
- 支持 P2P(WebRTC)或客户端-服务器(WebSocket)
- 可以与 Colyseus/Nakama 等进行匹配和身份验证集成
## 尝试一下
[互动演示](https://martini.blueprintlab.io/preview) - 在浏览器中即时测试多人游戏
或者安装:
```bash
npm install @martini-kit/core @martini-kit/phaser phaser
```
链接:
- 网站: [https://martini.blueprintlab.io/](https://martini.blueprintlab.io/)
- 文档: [https://martini.blueprintlab.io/docs](https://martini.blueprintlab.io/docs)
- GitHub: [https://github.com/BlueprintLabIO/martini](https://github.com/BlueprintLabIO/martini)
- npm: [https://www.npmjs.com/package/@martini-kit/core](https://www.npmjs.com/package/@martini-kit/core)
欢迎反馈,也想知道是否有其他人遇到过类似的多人状态管理问题。