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 | 伺服器已經關閉,可能是正在維護或是遇到錯誤而長期停機 |