<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jack Jiang

    我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
    posts - 494, comments - 13, trackbacks - 0, articles - 1

    1、引言

    在即時通訊網經常能看到各種高大上的高并發、分布式、高性能架構設計方面的文章,平時大家參加的眾多開發者大會,主題也都是各種高大上的話題——什么5G啦、AI人工智能啦、什么阿里雙11分分鐘多少萬QPS高并發等等。

    但實際上,對于普通的開發者(包括IM開發人員)來說,多數公司、多數團隊也都是干著默默無聞、平淡無奇的產品開發,并沒有那么多高并發、高大上的事情可以做。

    就拿一個IM系統來說,無論你的架構設計考慮了多少分布式、高吞吐、高可用,所有這些事情只要落地,那編碼的第一件事情就是要實現幾乎所有信息系統都要面對的任務——如何設計賬號登錄功能?

    本文將分享幾種典型的移動端賬號登陸方式的技術原理,以及設計思路,理解后,完全可以快速實施于你的各種應用系統(并不限于IM系統)中。本文閱讀對像主要為剛入門的開發人員,請程序老司機們嘴下留情哦。

     

    通過本篇文章, 你可以學到:

    1)主流賬號登陋技術方案細節;

    2)相應的表設計;

    3)相應的流程設計。

    通過本篇文章, 你無法學到:

    與其他原理性的文章一樣,本篇不涉及具體代碼實現細節(對于程序員來說,只要思路搞通,代碼咋寫都不會太爛,大家應該都有體會)。

    學習交流:

    - 即時通訊/推送技術開發交流5群:215477170[推薦]

    - 移動端IM開發入門文章:《新手入門一篇就夠:從零開發移動端IM

    (本文同步發布于:http://www.52im.net/thread-2863-1-1.html

    2、IM開發干貨系列文章

    本文是系列文章中的第20篇,總目錄如下:

    IM消息送達保證機制實現(一):保證在線實時消息的可靠投遞

    IM消息送達保證機制實現(二):保證離線消息的可靠投遞

    如何保證IM實時消息的“時序性”與“一致性”?

    IM單聊和群聊中的在線狀態同步應該用“推”還是“拉”?

    IM群聊消息如此復雜,如何保證不丟不重?

    一種Android端IM智能心跳算法的設計與實現探討(含樣例代碼)

    移動端IM登錄時拉取數據如何作到省流量?

    通俗易懂:基于集群的移動端IM接入層負載均衡方案分享

    淺談移動端IM的多點登陸和消息漫游原理

    IM開發基礎知識補課(一):正確理解前置HTTP SSO單點登陸接口的原理

    IM開發基礎知識補課(二):如何設計大量圖片文件的服務端存儲架構?

    IM開發基礎知識補課(三):快速理解服務端數據庫讀寫分離原理及實踐建議

    IM開發基礎知識補課(四):正確理解HTTP短連接中的Cookie、Session和Token

    IM群聊消息的已讀回執功能該怎么實現?

    IM群聊消息究竟是存1份(即擴散讀)還是存多份(即擴散寫)?

    IM開發基礎知識補課(五):通俗易懂,正確理解并用好MQ消息隊列

    一個低成本確保IM消息時序的方法探討

    IM開發基礎知識補課(六):數據庫用NoSQL還是SQL?讀這篇就夠了!

    IM里“附近的人”功能實現原理是什么?如何高效率地實現它?

    IM開發基礎知識補課(七):主流移動端賬號登錄方式的原理及設計思路》(本文)

    3、最經典的用戶名密碼注冊登陸方式

    一個典型的用戶名密碼注冊登陸功能類似于下面這樣:

     

    這種賬號登陸方式很經典也很常用,先注冊、再進行登錄,尤其在老一點的CMS系統、網站系統、聊天應用中都能找到這個影子。

    它的技術原理流程圖如下:

     
     

    如上圖所示,詳細的流程說明如下:

    • 1)前端將用戶名、密碼發送到服務器,服務器進行常規的判斷,判斷用戶名、密碼長度是否滿足,用戶名是否重復等條件,條件不通過直接返回對應錯誤碼給到前端,這里密碼字段,為了防止傳輸過程中被截胡,建議加密再上傳,我們的傳輸密碼默認都是會進行一個md5加密,然后記錄到數據庫再進行一層加密,就算是脫庫也沒事,密碼不要明文存儲。
    • 2)校驗通過后,就將用戶名密碼寫入數據庫,并進行后面積分發放等操作,這里不展開。
    • 3)現在進行登錄,前端將用戶名,密碼發送給到服務端,服務端首先會校驗登錄次數是否超過設置的閾值,如果超過只能繼續等待被關小黑屋。
    • 4)如果未超過繼續登錄邏輯,判斷用戶名、密碼是否正確,不正確密碼則進行閾值的判斷,如果超過則關小黑屋,記住小黑屋必須設置過期時間,要不然就會永久關上了,這個可以用redis的過期來做。
    • 5)登錄成功后進行后續的一切后置邏輯,比如加積分。。。等操作。

    這種經典的注冊登陸方式,具體怎么設計就不在這里贅述了,誰都懂。

    4、現今最主流的手機號注冊登陸方式

    4.1 基本原理

    典型的手機號注冊登陸功能類似于下圖:

     

    典型的手機號注冊技術原理流程圖如下:

     
     

    如上圖所示,詳細的流程說明如下:

    • 1)首先輸入手機號:然后發送到服務端,服務端將手機號記錄在我們數據庫中,然后生成隨機驗證碼,并將手機號和驗證碼綁定到一個redis里面,然后記錄過期時間,這個過期時間一般是10分鐘左右,這就是我們一般手機驗證碼的有效期;
    • 2)手機接收到手機短信后:那么就在界面填寫驗證碼發送服務端,服務端收到驗證碼后就會在redis里面查詢到這個手機號對應的驗證碼,失敗就返回錯誤碼。
    • 3)成功后:就進行登錄操作。

    這里看起來沒有明確的注冊登錄操作,其實在發送手機號碼就可以認為是一個常規的注冊,然后后面的驗證碼輸入就是一個登陸操作。

    但這種區別于常見的用戶名密碼注冊方式,是沒有密碼的的。

    問: 那我要密碼咋辦?

    答: 在后續產品里面增加一個手機號碼密碼補錄的功能即可,這也是現在很常規的手法,但是現在移動互聯網大爆炸時代,密碼已經顯得不是那么重要了,反正我從來記不住密碼,如果手機號碼能操作的app,絕對不用密碼來操作。

    4.2 具體的數據庫設計

    表結構: 

    說明:

    這里只是單純說明需要用到的數據,沒有擴展具體場景,這個表結構能夠滿足上面兩個方案的設計。

    5、一種輔助的登陸方式:第3方賬號登陸

    5.1 基本原理

    現在很多應用為了降低新用戶的使用門檻,都會對接第3方賬號進行登陸(比如:用微信號登陸、QQ號登陸、微博賬號登陸等)。

    這里我以QQ的開放平臺登錄邏輯為例進行講解。

    某團外賣的QQ賬號登陸功能如下圖:

     

    我們先來一波時序圖:

     
     

    時序流程詳細說明:

    • 1)客戶端自己調起登錄的界面,進行輸入用戶名、密碼,這里的是第三方的用戶名,密碼,登錄成功后,會返回access_token openid expire_in,這過程會使用到oauth2.0,不過在sdk里面進行內置回調獲取了,后面我們會說明我們自身實現的oauth2.0;
    • 2)客戶端拿到access_token、openid、login_type(qq、wechat...)請求應用服務器,應用服務器拿到這些數據后就會根據對應的login_type去對應的用戶中心進行access_token和openid進行校驗。校驗不通過則返回對應錯誤碼;
    • 3)校驗通過后就會判斷本地是否有這個login_type和openid是否存在,不存在則進行獲取遠程的用戶名、頭像等基礎信息來作為本地基礎數據,并且返回code值;
    • 4)如果已經存在,那就是進行登錄操作,返回code值;
    • 5)客戶端拿到code值后進行token值的換取,這個完全遵照oauth2.0的協議來走的,后續每次請求必須帶上token,token值在服務端的時間比較久,因為我們想要做的是那種永不下線的操作,所以每次請求我們都將token過期時間進行累加。

    想要深入了解第3方賬號登陸,可以讀讀這兩篇:《第三方登錄:QQ登錄接入指南》、《第三方賬號登錄功能接入完全流程》。

    5.2 具體的數據庫設計

    表結構:

    對于讀者的建議,我這里做一下數據庫的整理。

     

    用戶基礎表(users):

     

    用戶驗證關聯表(user_auth_rel): 

     

    本地用戶表(user_local_auth):

     

    第三方用戶表(user_third_auth): 

     

    表結說明:

    • 1)users表只是單純針對我們業務側的登錄,主要是做自身業務的oauth2.0業務;
    • 2)user_local_auth是做自己用戶名、密碼登錄,手機號碼登錄信息記錄;
    • 3)user_third_auth是我們第三方用戶體系的數據記錄;
    • 4)user_auth_rel是用來關聯我們users表與user_local_auth、user_third_auth;
    • 5)整個設計理念就是將自建用戶與第三方在存儲上區分,這在架構演進上也是合乎情理的,開始用戶體系大多自建,而后才是對外接入。

    6、本文小結

    總的來講,賬號注冊登錄功能在一般的系統里都是入口功能,一般情況下都不會太復雜。

    對于第三方用戶的接入技術,也同樣比較簡單,我文章里設計多一個user_thirds是可以支持足夠多的第三方接入,當然一般我們也就兩三個登錄就好,太多登錄方不僅自身維護成本,界面擺盤也不好看不是。

    希望大家能夠通過以上學習,能夠對于賬戶注冊登錄有一個比較好的認知,文章里設計方案不包含分表分庫、沒有服務化,就是簡單直接的設計,當然用戶量和需要的不一樣,在這個基礎上還要加很多東西,謝謝大家閱讀。

    附錄:更多IM開發方面的文章

    [1] IM開發綜合文章:

    新手入門一篇就夠:從零開發移動端IM

    移動端IM開發者必讀(一):通俗易懂,理解移動網絡的“弱”和“慢”

    移動端IM開發者必讀(二):史上最全移動弱網絡優化方法總結

    從客戶端的角度來談談移動端IM的消息可靠性和送達機制

    現代移動端網絡短連接的優化手段總結:請求速度、弱網適應、安全保障

    騰訊技術分享:社交網絡圖片的帶寬壓縮技術演進之路

    小白必讀:閑話HTTP短連接中的Session和Token

    IM開發基礎知識補課:正確理解前置HTTP SSO單點登陸接口的原理

    移動端IM開發需要面對的技術問題

    開發IM是自己設計協議用字節流好還是字符流好?

    請問有人知道語音留言聊天的主流實現方式嗎?

    一個低成本確保IM消息時序的方法探討

    完全自已開發的IM該如何設計“失敗重試”機制?

    通俗易懂:基于集群的移動端IM接入層負載均衡方案分享

    微信對網絡影響的技術試驗及分析(論文全文)

    即時通訊系統的原理、技術和應用(技術論文)

    開源IM工程“蘑菇街TeamTalk”的現狀:一場有始無終的開源秀

    QQ音樂團隊分享:Android中的圖片壓縮技術詳解(上篇)

    QQ音樂團隊分享:Android中的圖片壓縮技術詳解(下篇)

    騰訊原創分享(一):如何大幅提升移動網絡下手機QQ的圖片傳輸速度和成功率

    騰訊原創分享(二):如何大幅壓縮移動網絡下APP的流量消耗(上篇)

    騰訊原創分享(三):如何大幅壓縮移動網絡下APP的流量消耗(下篇)

    如約而至:微信自用的移動端IM網絡層跨平臺組件庫Mars已正式開源

    基于社交網絡的Yelp是如何實現海量用戶圖片的無損壓縮的?

    騰訊技術分享:騰訊是如何大幅降低帶寬和網絡流量的(圖片壓縮篇)

    騰訊技術分享:騰訊是如何大幅降低帶寬和網絡流量的(音視頻技術篇)

    字符編碼那點事:快速理解ASCII、Unicode、GBK和UTF-8

    全面掌握移動端主流圖片格式的特點、性能、調優等

    子彈短信光鮮的背后:網易云信首席架構師分享億級IM平臺的技術實踐

    微信技術分享:微信的海量IM聊天消息序列號生成實踐(算法原理篇)

    自已開發IM有那么難嗎?手把手教你自擼一個Andriod版簡易IM (有源碼)

    融云技術分享:解密融云IM產品的聊天消息ID生成策略

    適合新手:從零開發一個IM服務端(基于Netty,有完整源碼)

    拿起鍵盤就是干:跟我一起徒手開發一套分布式IM系統

    >> 更多同類文章 …… 

    [2] 有關IM架構設計的文章:

    淺談IM系統的架構設計

    簡述移動端IM開發的那些坑:架構設計、通信協議和客戶端

    一套海量在線用戶的移動端IM架構設計實踐分享(含詳細圖文)

    一套原創分布式即時通訊(IM)系統理論架構方案

    從零到卓越:京東客服即時通訊系統的技術架構演進歷程

    蘑菇街即時通訊/IM服務器開發之架構選擇

    騰訊QQ1.4億在線用戶的技術挑戰和架構演進之路PPT

    微信后臺基于時間序的海量數據冷熱分級架構設計實踐

    微信技術總監談架構:微信之道——大道至簡(演講全文)

    如何解讀《微信技術總監談架構:微信之道——大道至簡》

    快速裂變:見證微信強大后臺架構從0到1的演進歷程(一)

    17年的實踐:騰訊海量產品的技術方法論

    移動端IM中大規模群消息的推送如何保證效率、實時性?

    現代IM系統中聊天消息的同步和存儲方案探討

    IM開發基礎知識補課(二):如何設計大量圖片文件的服務端存儲架構?

    IM開發基礎知識補課(三):快速理解服務端數據庫讀寫分離原理及實踐建議

    IM開發基礎知識補課(四):正確理解HTTP短連接中的Cookie、Session和Token

    WhatsApp技術實踐分享:32人工程團隊創造的技術神話

    微信朋友圈千億訪問量背后的技術挑戰和實踐總結

    王者榮耀2億用戶量的背后:產品定位、技術架構、網絡方案等

    IM系統的MQ消息中間件選型:Kafka還是RabbitMQ?

    騰訊資深架構師干貨總結:一文讀懂大型分布式系統設計的方方面面

    以微博類應用場景為例,總結海量社交系統的架構設計步驟

    快速理解高性能HTTP服務端的負載均衡技術原理

    子彈短信光鮮的背后:網易云信首席架構師分享億級IM平臺的技術實踐

    知乎技術分享:從單機到2000萬QPS并發的Redis高性能緩存實踐之路

    IM開發基礎知識補課(五):通俗易懂,正確理解并用好MQ消息隊列

    微信技術分享:微信的海量IM聊天消息序列號生成實踐(算法原理篇)

    微信技術分享:微信的海量IM聊天消息序列號生成實踐(容災方案篇)

    新手入門:零基礎理解大型分布式架構的演進歷史、技術原理、最佳實踐

    一套高可用、易伸縮、高并發的IM群聊、單聊架構方案設計實踐

    阿里技術分享:深度揭秘阿里數據庫技術方案的10年變遷史

    阿里技術分享:阿里自研金融級數據庫OceanBase的艱辛成長之路

    社交軟件紅包技術解密(一):全面解密QQ紅包技術方案——架構、技術實現等

    社交軟件紅包技術解密(二):解密微信搖一搖紅包從0到1的技術演進

    社交軟件紅包技術解密(三):微信搖一搖紅包雨背后的技術細節

    社交軟件紅包技術解密(四):微信紅包系統是如何應對高并發的

    社交軟件紅包技術解密(五):微信紅包系統是如何實現高可用性的

    社交軟件紅包技術解密(六):微信紅包系統的存儲層架構演進實踐

    社交軟件紅包技術解密(七):支付寶紅包的海量高并發技術實踐

    社交軟件紅包技術解密(八):全面解密微博紅包技術方案

    社交軟件紅包技術解密(九):談談手Q紅包的功能邏輯、容災、運維、架構等

    即時通訊新手入門:一文讀懂什么是Nginx?它能否實現IM的負載均衡?

    即時通訊新手入門:快速理解RPC技術——基本概念、原理和用途

    多維度對比5款主流分布式MQ消息隊列,媽媽再也不擔心我的技術選型了

    從游擊隊到正規軍(一):馬蜂窩旅游網的IM系統架構演進之路

    從游擊隊到正規軍(二):馬蜂窩旅游網的IM客戶端架構演進和實踐總結

    IM開發基礎知識補課(六):數據庫用NoSQL還是SQL?讀這篇就夠了!

    瓜子IM智能客服系統的數據架構設計(整理自現場演講,有配套PPT)

    阿里釘釘技術分享:企業級IM王者——釘釘在后端架構上的過人之處

    >> 更多同類文章 ……

    (本文同步發布于:http://www.52im.net/thread-2863-1-1.html



    作者:Jack Jiang (點擊作者姓名進入Github)
    出處:http://www.52im.net/space-uid-1.html
    交流:歡迎加入即時通訊開發交流群 215891622
    討論:http://www.52im.net/
    Jack Jiang同時是【原創Java Swing外觀工程BeautyEye】【輕量級移動端即時通訊框架MobileIMSDK】的作者,可前往下載交流。
    本博文 歡迎轉載,轉載請注明出處(也可前往 我的52im.net 找到我)。


    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    Jack Jiang的 Mail: jb2011@163.com, 聯系QQ: 413980957, 微信: hellojackjiang
    主站蜘蛛池模板: 亚洲精品午夜视频| 久久国产亚洲电影天堂| 亚洲一区中文字幕在线电影网| 精品免费tv久久久久久久| 亚洲av无码成人精品区| 人人爽人人爽人人片A免费| 免费A级毛片无码A| 爱情岛论坛亚洲品质自拍视频网站| 日本黄色免费观看| 国产精品久久亚洲一区二区| 免费一看一级毛片| 狠狠躁狠狠爱免费视频无码| 亚洲精品无码鲁网中文电影| 毛片在线全部免费观看| 亚洲最大在线观看| 四虎免费在线观看| 一级中文字幕免费乱码专区 | 国产四虎免费精品视频| 亚洲六月丁香六月婷婷蜜芽| 免费看大美女大黄大色| 无遮挡a级毛片免费看| 国产亚洲精品xxx| 1区2区3区产品乱码免费| 亚洲国产aⅴ成人精品无吗| 亚洲AⅤ永久无码精品AA| 成人无码区免费A∨直播| 亚洲高清视频免费| 四虎影院在线免费播放| 国产精品1024在线永久免费 | 亚洲av区一区二区三| 国产三级在线免费| 中文字幕亚洲综合小综合在线| 国产又大又长又粗又硬的免费视频| 国产成人高清精品免费观看| 亚洲高清视频在线播放| 天堂亚洲免费视频| 69视频在线是免费观看| 色窝窝亚洲AV网在线观看| 久久精品亚洲综合一品| 日本不卡视频免费| 久久香蕉国产线看免费|