Samael

Colyseus源码阅读1

最近觉得自己的技能有了瓶颈, 所以想通过阅读一些源码进行提高, 这次就先选定一个我比较喜欢的实时游戏框架Colyseue

介绍

该项目是由gamestd工作室开源的一套服务器框架, 基于Node.js开发, 使用TypeScript. 并适配了多种游戏引擎

项目更新节奏稳定. 因为项目之前遇到过有些奇怪问题,开发人员反馈比较积极, 我使用的项目已经成功上线, 至今没遇到过什么大问题

另外开发者也提供了很多别的有用的工具, 给独立游戏开发者提供了很多的帮助, 具体可以去他们的github

特点

Colyseus特点之一就是提供了一套高效状态同步的方案, 让游戏开发人员专注于游戏逻辑的开发, 刚不用考虑游戏世界同步的问题 以下是同步流程, 来自官网

              room.send({ action: "left" })

                           |
      +------------+       |       +-----------------------------------+
+-----+ Client #1  +-------|       |  Room handler #1                  |
|     +------------+       |       |                                   |
|     +------------+       |       |  onMessage (client, data) {       |
|-----+ Client #2  |       --------+    if (data.action === "left") {  |
|     +------------+               |      // update the room state     |
|     +------------+               |    }                              |
|-----+ Client #3  |               |  }                                |
|     +------------+               +-----------------------------------+
|                                                    |
|        patch state broadcast (binary diff)         |
|----------------------------------------------------+

项目结构

这里只罗列src文件夹, 结构还是直观的

src
├── Debug.ts
├── MatchMaker.ts 
├── Protocol.ts
├── Room.ts   
├── Server.ts 
├── Utils.ts
├── discovery
│   └── index.ts
├── errors
│   ├── MatchMakeError.ts
│   └── SeatReservationError.ts
├── index.ts
├── matchmaker
│   ├── RegisteredHandler.ts
│   └── drivers
│       ├── Driver.ts
│       ├── LocalDriver
│       │   ├── Query.ts
│       │   ├── RoomData.ts
│       │   └── index.ts
│       └── MongooseDriver.ts
├── presence
│   ├── LocalPresence.ts
│   ├── Presence.ts
│   └── RedisPresence.ts
├── rooms
│   ├── LobbyRoom.ts
│   └── RelayRoom.ts
├── serializer
│   ├── FossilDeltaSerializer.ts
│   ├── SchemaSerializer.ts
│   └── Serializer.ts
└── transport
    ├── TCPTransport.ts
    ├── Transport.ts
    └── WebSocketTransport.ts

类的相互调用关系

npx arkit -e "rooms/*,errors/*,matchmaker/*,serializer/*,transport/*,discovery/*,presence/*,Debug.ts" -o ../root.svg

root

以下是项目中的核心类文件

下一篇进行Server.ts的源码分析, 这个也是使用Colyseus能接触到的第一个类


Share this: