上一篇文章咱們討論了聊天的基本流程,那麼咱們如今基於上一篇文章的流程開始定義協議,若是有朋友有更好的建議,能夠在下邊回覆一塊兒學習討論,咱們說登陸分爲兩部分,第一部分爲和服務器的鏈接階段,第二部分爲驗證階段,那麼首先咱們基於這2個部分來指定協議:android
鏈接階段:ios
{"id":"xxxx","#":"conn","u":1000@android/ios,"v":100}json
id:客戶端生成的id數組
#:表示行爲,通俗意義是那個說,咱們要作什麼操做,該屬性主要是對應服務器上的Handler服務器
u:這裏表示用戶信息的意思,其實後邊這個字符串表明2個含義,@以前是用戶id,@以後是用戶的手機版本,咱們要獲取用戶的手機版本,分開寫也能夠,可是在這裏感受不必分開就直接何在一塊兒了學習
v:用戶當前該軟件的版本號,主要是爲了檢查用戶手機上當前版本用的加密
用戶講上述json發送到服務器,那麼服務器要響應客戶端,因此這裏咱們還要定義服務器端給客戶端返回的協議格式spa
響應鏈接階段:ip
{"id":"xxxx","#":"conn","ssl":"[1]","rar":"[1,2]","ips":"[]"}ssl
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成功,全部的成功均可以用該協議,那麼這就是咱們的登陸階段的協議制定,關於聊天的協議咱們休息一會,在下一篇在詳細介紹,歡迎你們來討論