Skip to content
This repository has been archived by the owner on Aug 15, 2022. It is now read-only.

Latest commit

 

History

History
83 lines (63 loc) · 3.91 KB

packet.md

File metadata and controls

83 lines (63 loc) · 3.91 KB

格式

WebSocket 會以二進制的格式傳遞資料,但第一個開頭為 Header 代碼。例如 [0, 233, 26, 92] 即表示為「函式請求」的標頭 0

必須去除標頭才能夠解析二進制內容,二進制內容是一個 JSON 陣列,依照標頭來決定該如何載入這個內容。

函式定義

函式必須為正整數,這意味著所有函式必須事先定義。

const (
    MethodCreateUser Method = iota
    MethodUpdateUser
)

type Method uint8

函式請求

當要送出一個請求到伺服器時,其 WebSocket 內容格式如下。

[ 0   ]                             // [uint8 ] 封包種類
[ 0 0 ]                             // [uint16] 工作編號
[ 0 0 ]                             // [uint16] 中繼資料長度
[ 0   ]                             // [uint8 ] 呼叫函式編號
[ ... ]                             // JSON 中繼資料
[ ... ]                             // JSON 主要資料

回應內容

伺服器透過 WebSocket 所回傳的標準回應格式內容如下。

[ 0   ]                             // [uint8 ] 封包種類
[ 0 0 ]                             // [uint16] 工作編號
[ 0 0 ]                             // [uint16] 中繼資料長度
[ 0   ]                             // [uint8 ] 狀態代碼
[ ... ]                             // JSON 中繼資料
[ ... ]                             // JSON 主要資料

通知內容

伺服器經由 WebSocket 主動發送至客戶端的通知事件內容格式如下。

[ 0   ]                             // [uint8 ] 封包種類
[ 0   ]                             // [uint8]  事件編號
[ 0 0 ]                             // [uint16] 中繼資料長度
[ ... ]                             // JSON 中繼資料
[ ... ]                             // JSON 主要資料

狀態代號

成功

狀態碼 狀態字樣 說明
1 OK 完全沒有錯誤
2 PROCESSING 已接收到請求且正在處理中,不會馬上完成
3 NO_CHANGES 提出的請求沒有改變任何事情,例如:請求刪除已經被刪除的資料

錯誤

狀態碼 狀態字樣 說明
50 ERROR 內部不可預期的錯誤
51 FULL 已滿而無法接受該請求,例如:正在加入已滿的聊天室、朋友清單
52 EXISTS 某個東西已經存在,例如:使用者名稱、電子郵件地址
53 INVALID 請求的格式不正確
54 NOT_FOUND 找不到請求的資源
55 NOT_AUTHORIZED 請求者必須登入後才能發送此請求
56 NO_PERMISSION 請求者在登入後沒有權限發送此請求而被拒絕
57 UNIMPLEMENTED 此功能尚未被實作完成
58 TOO_MANY_REQUESTS 請求者在短時間內有太多的請求,需要暫緩一會才能重新發送請求
59 RESOURCE_EXHAUSTED 請求者可用的請求額度已被耗盡
60 BUSY 伺服器正在繁忙中而暫時無法處理此請求
61 DEAD 伺服器已經關閉,可能是正在維護或是遇到錯誤而長期停機