全局聊天
全局聊天 是 Vitium 的一个子系统。它是一个典型的 Web 2 即时通讯软件。用户可以使用全局聊天在游戏外发送与接收消息,并接收服务器通告。
全局聊天被设计为公开的。然而,只有已登录的用户才被允许发送消息。仍然,任何人都可以读取聊天内容。
支持的聊天消息格式为带有 HTML 支持的文本。
我们如下编码一条全局聊天消息:
| 字段 | 标识符 | 描述 | 格式 |
|---|---|---|---|
| 发件人 | sender | 发件人用户名;如果字段缺失,则为服务器通告 | 不含空格的非空 ASCII 字符串 |
| 发件时间 | time | 发件的 UNIX 时间戳 | 64 位无符号整数 |
| 内容 | content | 聊天消息内容 | UTF-8 字符串 |
| HTML 开关 | html | 内容 是否应当被解释为 HTML, 否则为纯文本 | 布尔值 |
全局聊天被设计为 RESTful API /api/chat .
客户端不应当尝试让未登录的用户发送消息。
服务端提供 /api/chat API 用于发送新的聊天消息。为了调用此 API, 客户端应当先获取登录会话,再 HTTP POST 至此路由。请求体为以 JSON 编码的聊天数据。请求应带有会话 cookie.
如果请求是合法的,且客户端提供的身份验证信息与消息的发件人一致,服务端正常运作时,返回 HTTP 200.
从 /api/chat 读取聊天消息有两种方式,即同步(接收所有消息)和异步(等待下一条消息)。
同步读取将返回服务端保存的所有指定时刻之后的聊天消息。客户端可以利用这一机制在用户刚登录时获取一次聊天记录。
为了同步调用 API, 客户端应当 HTTP GET /api/chat , 并传递 URL 查询参数 after . after 的值为指定的 UNIX 时间戳,单位为毫秒。
服务端正常运作时,返回所有发件时间在 after 之后的聊天消息,以 JSON 列表编码。
异步读取将在有新消息到达服务端时实时返回最新消息。客户端可以利用这一机制保证用户看到的聊天内容是即时的。
异步通过通过 服务器发送事件 实现。
为了异步调用 API, 客户端应当 HTTP GET /api/chat . 这返回一个服务器发送事件。每当有新的聊天消息,服务端更新一个事件,其 data 字段为 JSON 编码的聊天数据。