篇幅較長,感謝閱讀。
在我決定作開源是由於自身工做接觸到大多數的項目都是基於開源大佬寫的框架,自覺慚愧,工做以來一直忙於業務與功能實現,多多少少作過的幾個項目也沒能抽出部分好一點的功能業務Maven包什麼的提供也同行使用或借鑑,這實在是有悖於本身的初心。javascript
決定作開源是今年(2018)7月末的時候,本身曾作的一個Iot項目剛剛被幾個網上的朋友問到,並尋求源碼,那麼久作了一個Demo,並放到了GitHub上。html
以後感受應該作一個有本身情感注入的項目才行,而不是工做上的現實交易的項目,我想作一個屬於本身的項目,有意義的項目。前端
當時還在創業階段,給本身的時間也很少,因此能想到作什麼也確實是想法有限,更重要的是時間也有限。java
謝謝一我的,讓我有了一個Idea去作一個項目,她常常說工做後什麼話都不能輕易說,偶爾沒有本身的空間去抒發本身的情緒,當時想到的是作一個我的樹洞的東西,可是那有點產品性,且有點很差給同行們借鑑。而我在創業時也剛恰好接觸到netty,以後用netty作了一個Iot物聯網項目,如今想到就是順便提高本身的能力,將netty運用並熟悉掌握起來,作一個聊天室吧,一開始想法侷限,就是一個在線聊天室。git
沒錯,一開始就是一個項目式的形式,我很快的完成了一個聊天的功能,並打了一個tag包。如今的地址是:demo。
下載地址:demogithub
我實現了用戶登陸、聊天曆史、隨機用戶名、異步數據寫入等基本功能。
登陸是隨機分配的用戶名,聊天數據會緩存本地,channel斷開(用戶離線的時候就執行異步任務去存儲數據,在登陸界面時就讀取數據庫數據)web
修復聊天記錄功能,實現重複信息錄入,完善前端頁面,回車監聽等,對於前版本的本地緩存Map類型選用錯誤,對重複數據沒法存儲數據庫
用戶註冊登陸功能,系統聊天綁定用戶,禁止二次登陸等,前端頁面大改,用戶登陸後,id和channel一一對應,當出現二次id登陸且channel不一樣時,視爲二次登陸。bootstrap
本人主導SUI Mobile構建仿微信樣式頁面版,使用時開F12手機界面,修改前端樣式。
小程序
TCP/IP軟硬件通訊-單片機等應用的TCP通訊,Netty處理二進制圖片發送聊天功能,前言說到的Iot物聯網項目的功能添加。
MQTT協議軟硬件通訊等,Iot物聯網,這個暫時被提取爲分支模塊。
API調用Netty長連接執行發送消息(在線數、用戶列表)詳情地址
便可以以系統身份想在線channel發送數據。
到此,產品項目分支到一段落,到了這個時候項目已經積累了十多個參與者(QQ羣:628793702),在QQ羣貢獻一些他們的建議與在工做中遇到的問題。
GitHub地址: InChat
A lightweight, efficient communication framework that supports chat and the Internet of Things(一個輕量級、高效率的支持聊天與物聯網的通信框架)
感謝一個在成都的朋友提供的業務場景,須要小程序參與控制Iot物聯網,並使用MQTT的場景。
本Demo是小程序端的Iot案例簡單實現。
首先是配置修改,你能夠在本分支的yml配置文件進行mqtt的配置,核心的參數是:
ssl: false # 使用ssl加密protocol: MQTT_WS_PAHO # MQTT MQTT_WS_MQTT(mqtts.js) MQTT_WS_PAHO(paho.js)
本項目使用的paho.js的mqtt鏈接形式,因此protocol要選擇MQTT_WS_PAHO。項目目前是未加密的,啓動ssl本案例暫時不能通信。
默認直接啓動項目就好。
項目啓動後的地址 :ws://192.168.1.121:8094/mqtt
ws、與後綴mqtt是com.myself.nettychat.bootstrap.AbstractBootstrapServer.java中的配置
你須要小程序開發者工具,並默認認定你是具有基本的小程序開發經驗的開發者,這裏省略部分的基本配置,你只須要將本分支中wechat-client文件夾中的文件徹底複製到你新建的小程序項目便可,調試狀況下無需AppID
你須要注意的是pages/connect/connect.js中的第78行
var client = new MQTT.Client("ws://" + this.data.server_addr+"/mqtt", "clientId_" + Math.random().toString(36).substr(2));
這裏就是小程序的鏈接地址配置,默認和項目啓動的一致,你須要在小程序的鏈接頁面填寫你的
IP:端口
而後就鏈接成功了,接着你能夠在subscribe頁面訂閱一個主題,本Demo是訂閱TEST。
運行test中的com.myself.nettychat.MqttPublishSample,你須要修改爲本機的配置,相似鏈接地址等
String broker = "ws://192.168.1.121:8094/mqtt";//地址
須要注意的是,你的topic也要與小程序訂閱的主題一致哦!
運行測試用例,模擬硬件發送信息
回到小程序的message頁面,你能夠看到接收到了消息
針對小程序與單片機硬件執行Iot物聯網通信(TCP/IP)的一套完整Demo。
一、啓動項目,tcp監聽成功
二、運行com.myself.nettychat.tcptest.TCPTestClient (記得先改ip或端口,若是你有修改的話)
三、運行PostMan,請求下方的API 進行通訊測試
小程序端選購售貨機中的商品,點擊購買(小程序API向Iot中心發送對應商品的開鎖信息),Iot中心中轉開鎖信息給單片機,單片機接收信息打開對應的鎖。
通訊機制:幀頭+ID+數據類型+24把鎖狀態+crc校驗+幀尾(能夠按照需求進行定製)
com.myself.nettychat.config.TCPServerHandler (通訊接收的處理類)
http://localhost:8080/susu/back/get_channel_size GET
請求Iot中心,獲取當前鏈接存活狀態下的連接實例
{ "code": 200, "msg": "成功", "data": 1 }
http://localhost:8080/susu/back/get_channel_id_list GET
請求Iot中心,當前存活狀態下的連接Id列表
{ "code": 200, "msg": "成功", "data": [ "F5690137563CC8" ] }
http://localhost:8080/susu/back/send_to_channel POST
參數
{ "code": 200, "msg": "成功", "data": "【發送成功】" }
本項目爲InChat核心項目,服務端項目,以API形式做爲對外功能,相似騰訊IM的服務端做用,本文也將着重講解本項目的各個API,目前尚未嵌入Iot通訊模塊,僅以WebSocket的聊天室做爲初期發展,須要使用到Iot的朋友能夠先去Master項目瞭解。
前端對接公告,目前推出API,請均已此文檔說明的爲主,其他API非正式版或測試版,誤用
查看API列表
http://localhost:8080/susu/swagger-ui.html
POST http://loclhost:8080/susu/user/to_register
返回碼 | 信息內容 | 備註 |
---|---|---|
200 | 成功 | |
555 | 參數錯誤 | |
556 | 用戶名存在 |
僅API列表詳情中的API處於可用狀態,其他API請勿使用,暫未基本完成,使用請詳看文檔
一個基於WebRTC與netty相結合的語音與視頻流通信項目。還在構建中,,,
因爲構建爲分支,是由於暫時不能所有融合在一塊兒,不少場景暫時是獨立的,因此我針對朋友們的建議,構建了不一樣的分支項目,而且竟可能的實現其要求的功能。
這些分支不會被拋棄,我會在後期將他們整理到真正的正版項目中去。
感謝以上全部的沉澱!!!
項目如今已經開始了重構與業務代碼的抽離,我將把以上的功能所有抽成一個InChat-Maven包,並配合SpringBoot快速開發集成。
InChat
A lightweight, efficient communication framework that supports chat and the Internet of Things(一個輕量級、高效率的支持聊天與物聯網的通信框架)
從8月初到如今已經大約已經三個月了,因爲一直沒有時間與精力很好的維護這個項目,內心一直有所歉意。再次向每個關注過InChat項目的朋友表示抱歉。
從12月初,準確的說,應該是前幾天開始,InChat已經開始進行合理的重構與演進設計,同時相關文檔都會分享到GitHub上,與本人博客中。
例如想在已經開始設計的登陸模塊。
開源IM項目-InChat登陸接口設計與實現(基於Netty)
正如上文中說到的,我很感謝女友一直以來的陪伴,做爲程序猿來講,是很珍貴的,不過這個項目的初衷是爲了她而作的,然後能等到朋友與線上友人的支持真的是意料以外,再次很感謝各位熱愛開源的朋友。
明天就是她的生日,我但願把InChat繼續維持下去,做爲一個生日禮物必備的項目報告一直延續下去。
若是對本項目有興趣的,能夠加入QQ羣:628793702,一塊兒研究討論學習。
若是以上有一些對你有所幫助的話,還請到GitHub對項目點個Star。感謝對每個開源者的支持!謝謝。
但願本項目對你有所幫助,個人目標暫定,一個小衆IM加物聯網的開源通信項目。