小弟正在作的一個開源IM項目,目標是實現一個輕量級、高效率的支持聊天與物聯網的通信框架。昨天剛剛出的設計稿並再今天作了實現。web
項目是基於Netty的二次開發,關於Netty我這裏就再也不介紹了,懂的人天然都懂。個人預算是作一個全部企業或組織能夠引用的Maven項目,而且是基本上開箱即用,簡單實現對應的配置與重寫方法就能夠搭建本身的IM項目(某Q、某信的效果)。小程序
本文着重介紹的是登陸接口的設計與實現。服務器
設計思路websocket
關於InChat統一登陸的接口設計,設計針對小程序、APP、Web端的登陸做用,因此將做爲token的形式登陸InChat的WebSocket長鏈接,用戶服務器作sso的認證登陸後獲得token後直接發送login信息到InChat,用戶服務器須要重寫InChat中的verifyToken方法校驗本身的的Token信息是否有效,正常則啓動長鏈接。考慮到token失效問題,WebSocket長鏈接的登陸僅作初次登陸,接下來考慮以心跳形式保持連接狀態(pingpong),使用token認證是爲保護InChat連接的常規化(目前暫時這樣設計後面根據使用狀況更改設計)框架
因爲目前大部分的Web項目或基於IM的項目登陸可能存在多端的單點登陸,因此我選用了Token的形式,爲何登陸後還須要用token再來websocket這邊校驗一次呢?socket
由於你登陸的是web應用程序端的,而websocket而言,只要別人知道你的地址,那麼就能夠連接上,咱們不但願存在過多的死連接(無效連接),因此咱們須要將token再次發給InChat登陸,由InChat來檢驗是不是合法登陸連接,若是無效則關閉連接。ide
代碼實現學習
還請各位看官移步GitHub,設計
一、GitHub搜索InChat便可找到小弟項目blog
二、學習資料齊全,正在不斷更新文檔資料中
三、加入咱們一塊兒建設項目與提供建議,有小夥伴和你一塊兒學習哦
(QQ羣:628793702)
最後,公衆代碼實現均會在GitHub上,考慮到不方便與顯示問題,如今均寫思路實現代碼。
圖片