Skynet 游戏登录流程设计

概述

本文档描述了基于 WebSocket 的游戏客户端架构,包括网络连接、账号认证和游戏服登录的完整流程。

网络架构

架构概览

整个系统采用三层架构设计:

┌─────────────────┐    WebSocket     ┌─────────────────┐      TCP        ┌─────────────────┐
│   sconn-client  │ ───────────────► │     goscon      │ ──────────────► │     skyext      │
│  (Game Client)  │                  │   (Gateway)     │                 │  (Game Server)  │
└─────────────────┘                  └─────────────────┘                 └─────────────────┘

组件说明

通信协议

所有组件间的通信均使用 sproto RPC 协议进行数据交换。

登录流程

流程概览

登录过程分为两个主要阶段:

  1. 账号登录 - 通过第三方平台或本地账号获取认证令牌
  2. 游戏服登录 - 使用令牌连接游戏服务器

完整登录架构图

┌─────────────┐                    ┌─────────────┐
│   Client    │                    │  GamePass   │
│(phaser-game)│                    │(Auth Center)│
└──────┬──────┘                    └──────┬──────┘
       │                                  │
       │ 1. HTTP Account Login            │
       │ ──────────────────────────────►  │
       │                                  │
       │ 2. Return jwt-token              │
       │ ◄──────────────────────────────  │
       │                                  │
       │                                  │
┌──────▼──────┐    WebSocket/sproto      ┌─────────────┐      TCP/sproto     ┌─────────────┐
│   Client    │ ─────────────────────►   │   goscon    │ ──────────────────► │   skyext    │
│             │ 3. Game Login(jwt-token) │             │ 4. Forward Request  │             │
│             │ ◄─────────────────────   │             │ ◄────────────────── │             │
└─────────────┘    5. Login Response     └─────────────┘    Login Response   └─────────────┘

账号登录详细流程

第三方登录(GitHub 示例)

┌─────────────┐                 ┌─────────────┐                 ┌─────────────┐
│   Client    │                 │  GamePass   │                 │   GitHub    │
└──────┬──────┘                 └──────┬──────┘                 └──────┬──────┘
       │                               │                               │
       │ 1. Click Login Link           │                               │
       │ GET /auth/github              │                               │
       │ ────────────────────────────► │                               │
       │                               │                               │
       │ 2. Redirect to GitHub OAuth   │                               │
       │ ◄──────────────────────────── │ 3. OAuth Authorization        │
       │                               │ ────────────────────────────► │
       │                               │                               │
       │ 4. User Authorization         │                               │
       │ ───────────────────────────────────────────────────────────── │
       │                               │                               │
       │                               │ 5. Authorization Code         │
       │                               │ ◄──────────────────────────── │
       │                               │                               │
       │ 6. Redirect to Client         │                               │
       │    with jwt-token             │                               │
       │ ◄──────────────────────────── │                               │
       │                               │                               │

登录 URL 格式:

http://localhost:3180/auth/github?callback_url=http://localhost:8080

成功回调 URL 格式:

http://localhost:8080?access_token=jwt-token

游戏服登录详细流程

时序图

Client          goscon          skyext
  │                │               │
  │ 1. WebSocket   │               │
  │   Connection   │               │
  │ ─────────────► │               │
  │                │               │
  │ 2. Send Login  │ 3. Convert to │
  │   Request      │   TCP Forward │
  │ ─────────────► │ ────────────► │
  │                │               │
  │                │ 4. Verify     │
  │                │   Token &     │
  │                │   Process     │
  │                │               │
  │                │ 5. Return     │
  │ 6. Convert to  │   Login       │
  │   WebSocket    │   Result      │
  │ ◄───────────── │ ◄──────────── │
  │                │               │

登录协议定义

.context {
    rid 0 : integer         # role id 用于跳过选角色步骤直接登录角色
    proto_checksum 1 : string # 协议文件 checksum
}

# 登录协议
login 101 {
    request {
        token 0 : string    # JWT token,包含账号信息
        ctx 1 : context     # 上下文信息
    }
    response {
        code 0 : integer    # 响应码 (0: 成功, 其他: 错误码)
        account 1 : string  # 账号标识
        gamenode 2 : string # 需要连接的游戏节点标识
    }
}

响应码说明

响应码 说明
0 登录成功
1001 Token 无效
1002 Token 过期
1003 服务器维护中
1004 角色不存在

后续通信

成功登录游戏服后,客户端与服务器之间的所有通信都遵循 sproto RPC 协议规范:

相关项目链接

组件 描述 仓库地址
skyext 游戏服务器 https://github.com/hanxi/skyext
sconn-client TypeScript 客户端 https://github.com/hanxi/sconn-client
goscon 网关服务 https://github.com/hanxi/goscon
gamepass 账号中心 https://github.com/hanxi/gamepass
client Phaser 游戏客户端 https://github.com/hanxi/phaser-game

技术栈

点击进入评论 ...