上一篇文章我們討論了聊天的基本流程,那么我們現在基於上一篇文章的流程開始定義協議,如果有朋友有更好的建議,可以在下邊回復一起學習討論,我們說登錄分為兩部分,第一部分為和服務器的連接階段,第二部分為驗證階段,那么首先我們基於這2個部分來指定協議:
連接階段:
{"id":"xxxx","#":"conn","u":1000@android/ios,"v":100}
id:客戶端生成的id
#:表示行為,通俗意義是那個說,我們要做什么操作,該屬性主要是對應服務器上的Handler
u:這里表示用戶信息的意思,其實后邊這個字符串代表2個含義,@之前是用戶id,@之后是用戶的手機版本,我們要獲取用戶的手機版本,分開寫也可以,但是在這里感覺沒必要分開就直接何在一起了
v:用戶當前該軟件的版本號,主要是為了檢查用戶手機上當前版本用的
用戶講上述json發送到服務器,那么服務器要響應客戶端,所以這里我們還要定義服務器端給客戶端返回的協議格式
響應連接階段:
{"id":"xxxx","#":"conn","ssl":"[1]","rar":"[1,2]","ips":"[]"}
id:沒什么好說的,服務器端生成的id
#:對應的Handler,通俗說即使表示響應的哪一個action,例如連接階段用戶發送act是conn的話,那么這里響應回來#也是conn,相對應
ssl:這里我們用了一個數組,其實前期用一個值也是沒問題的,但是后期我們可能有還能多種加密方式,所以用數組
rar:這里也是一個數組,表示數據傳輸的壓縮方式
ips:這里表示空閑服務器列表,便於用戶選擇一個壓力小的服務器
好了,到這里為止我們完成了一個conn階段,那么下一步就是驗證階段了,我們繼續來討論協議
auth階段:
{"id":"xxxx","#":"auth","p":"1","ssl":2}
id:同樣是客戶端生成的id
#:表示行為,通俗意義是那個說,我們要做什么操作,該屬性主要是對應服務器上的Handler
p:表示加密后的密碼
ssl:表示用戶選擇的何種加密方式進行加密
那么在驗證的時候可能會失敗,那么服務器會返回錯誤信息,那么錯誤信息協議:
auth失敗階段:
{"id":"xxxx","#":"auth","ec":1,"em":"成功/失敗"}
id:服務器生成id
#:對應的Handler,通俗說即使表示響應的哪一個action,例如連接階段用戶發送act是auth的話,那么這里響應回來#也是auth,相對應
ec:ErrorCode,錯誤碼
em:ErrorMessage ,錯誤信息
auth成功階段:
{"id":"xxxx","#":"auth"}
其實這里不僅僅可以用於auth成功,所有的成功都可以用該協議,那么這就是我們的登錄階段的協議制定,關於聊天的協議我們休息一會,在下一篇在詳細介紹,歡迎大家來討論