基於Netty的聊天系統(二)協議定制----登錄篇


上一篇文章我們討論了聊天的基本流程,那么我們現在基於上一篇文章的流程開始定義協議,如果有朋友有更好的建議,可以在下邊回復一起學習討論,我們說登錄分為兩部分,第一部分為和服務器的連接階段,第二部分為驗證階段,那么首先我們基於這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成功,所有的成功都可以用該協議,那么這就是我們的登錄階段的協議制定,關於聊天的協議我們休息一會,在下一篇在詳細介紹,歡迎大家來討論


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM