摘要:一個(gè)輕量級(jí)高效率的支持聊天與物聯(lián)網(wǎng)的通訊框架從月初到現(xiàn)在已經(jīng)大約已經(jīng)三個(gè)月了,由于一直沒有時(shí)間與精力很好的維護(hù)這個(gè)項(xiàng)目,心里一直有所歉意。希望本項(xiàng)目對(duì)你有所幫助,我的目標(biāo)暫定,一個(gè)小眾加物聯(lián)網(wǎng)的開源通訊項(xiàng)目。
篇幅較長(zhǎng),感謝閱讀。萬事開頭難
在我決定做開源是因?yàn)樽陨砉ぷ鹘佑|到大多數(shù)的項(xiàng)目都是基于開源大佬寫的框架,自覺慚愧,工作以來一直忙于業(yè)務(wù)與功能實(shí)現(xiàn),多多少少做過的幾個(gè)項(xiàng)目也沒能抽出部分好一點(diǎn)的功能業(yè)務(wù)Maven包什么的提供也同行使用或借鑒,這實(shí)在是有悖于自己的初心。
決定做開源是今年(2018)7月末的時(shí)候,自己曾做的一個(gè)Iot項(xiàng)目剛剛被幾個(gè)網(wǎng)上的朋友問到,并尋求源碼,那么久做了一個(gè)Demo,并放到了GitHub上。
之后感覺應(yīng)該做一個(gè)有自己情感注入的項(xiàng)目才行,而不是工作上的現(xiàn)實(shí)交易的項(xiàng)目,我想做一個(gè)屬于自己的項(xiàng)目,有意義的項(xiàng)目。
當(dāng)時(shí)還在創(chuàng)業(yè)階段,給自己的時(shí)間也不多,所以能想到做什么也確實(shí)是想法有限,更重要的是時(shí)間也有限。
謝謝一個(gè)人,讓我有了一個(gè)Idea去做一個(gè)項(xiàng)目,她經(jīng)常說工作后什么話都不能輕易說,偶爾沒有自己的空間去抒發(fā)自己的情緒,當(dāng)時(shí)想到的是做一個(gè)個(gè)人樹洞的東西,但是那有點(diǎn)產(chǎn)品性,且有點(diǎn)不好給同行們借鑒。而我在創(chuàng)業(yè)時(shí)也剛剛好接觸到netty,之后用netty做了一個(gè)Iot物聯(lián)網(wǎng)項(xiàng)目,現(xiàn)在想到就是順便提升自己的能力,將netty運(yùn)用并熟悉掌握起來,做一個(gè)聊天室吧,一開始想法局限,就是一個(gè)在線聊天室。
初始項(xiàng)目演進(jìn)沒錯(cuò),一開始就是一個(gè)項(xiàng)目式的形式,我很快的完成了一個(gè)聊天的功能,并打了一個(gè)tag包?,F(xiàn)在的地址是:demo。
下載地址:demo
1.0.0版本詳情介紹
我實(shí)現(xiàn)了用戶登錄、聊天歷史、隨機(jī)用戶名、異步數(shù)據(jù)寫入等基本功能。
登錄是隨機(jī)分配的用戶名,聊天數(shù)據(jù)會(huì)緩存本地,channel斷開(用戶離線的時(shí)候就執(zhí)行異步任務(wù)去存儲(chǔ)數(shù)據(jù),在登錄界面時(shí)就讀取數(shù)據(jù)庫(kù)數(shù)據(jù))
1.2.0版本
修復(fù)聊天記錄功能,實(shí)現(xiàn)重復(fù)信息錄入,完善前端頁面,回車監(jiān)聽等,對(duì)于前版本的本地緩存Map類型選用錯(cuò)誤,對(duì)重復(fù)數(shù)據(jù)無法存儲(chǔ)
1.3.0版本
用戶注冊(cè)登錄功能,系統(tǒng)聊天綁定用戶,禁止二次登錄等,前端頁面大改,用戶登錄后,id和channel一一對(duì)應(yīng),當(dāng)出現(xiàn)二次id登錄且channel不同時(shí),視為二次登錄。
1.4.1版本
本人主導(dǎo)SUI Mobile構(gòu)建仿微信樣式頁面版,使用時(shí)開F12手機(jī)界面,修改前端樣式。
1.5.2版本
TCP/IP軟硬件通信-單片機(jī)等應(yīng)用的TCP通信,Netty處理二進(jìn)制圖片發(fā)送聊天功能,前言說到的Iot物聯(lián)網(wǎng)項(xiàng)目的功能添加。
1.5.8 版本
MQTT協(xié)議軟硬件通信等,Iot物聯(lián)網(wǎng),這個(gè)暫時(shí)被提取為分支模塊。
1.6.0 版本
API調(diào)用Netty長(zhǎng)鏈接執(zhí)行發(fā)送消息(在線數(shù)、用戶列表)詳情地址
即可以以系統(tǒng)身份想在線channel發(fā)送數(shù)據(jù)。
到此,產(chǎn)品項(xiàng)目分支到一段落,到了這個(gè)時(shí)候項(xiàng)目已經(jīng)積累了十多個(gè)參與者(QQ群:628793702),在QQ群貢獻(xiàn)一些他們的建議與在工作中遇到的問題。
GitHub地址:InChat分支開啟之路 paho-mqtt分支
A lightweight, efficient communication framework that supports chat and the Internet of Things(一個(gè)輕量級(jí)、高效率的支持聊天與物聯(lián)網(wǎng)的通訊框架)
感謝一個(gè)在成都的朋友提供的業(yè)務(wù)場(chǎng)景,需要小程序參與控制Iot物聯(lián)網(wǎng),并使用MQTT的場(chǎng)景。
本Demo是小程序端的Iot案例簡(jiǎn)單實(shí)現(xiàn)。
服務(wù)端配置首先是配置修改,你可以在本分支的yml配置文件進(jìn)行mqtt的配置,核心的參數(shù)是:
ssl: false # 使用ssl加密protocol: MQTT_WS_PAHO # MQTT MQTT_WS_MQTT(mqtts.js) MQTT_WS_PAHO(paho.js)
本項(xiàng)目使用的paho.js的mqtt連接形式,所以protocol要選擇MQTT_WS_PAHO。項(xiàng)目目前是未加密的,啟動(dòng)ssl本案例暫時(shí)不能通訊。
默認(rèn)直接啟動(dòng)項(xiàng)目就好。
項(xiàng)目啟動(dòng)后的地址 :ws://192.168.1.121:8094/mqtt
ws、與后綴mqtt是com.myself.nettychat.bootstrap.AbstractBootstrapServer.java中的配置
小程序配置你需要小程序開發(fā)者工具,并默認(rèn)認(rèn)定你是具備基本的小程序開發(fā)經(jīng)驗(yàn)的開發(fā)者,這里省略部分的基本配置,你只需要將本分支中wechat-client文件夾中的文件完全復(fù)制到你新建的小程序項(xiàng)目即可,調(diào)試情況下無需AppID
你需要注意的是pages/connect/connect.js中的第78行
var client = new MQTT.Client("ws://" + this.data.server_addr+"/mqtt", "clientId_" + Math.random().toString(36).substr(2));
這里就是小程序的連接地址配置,默認(rèn)和項(xiàng)目啟動(dòng)的一致,你需要在小程序的連接頁面填寫你的
IP:端口
然后就連接成功了,接著你可以在subscribe頁面訂閱一個(gè)主題,本Demo是訂閱TEST。
Java模擬MQtt客戶端運(yùn)行test中的com.myself.nettychat.MqttPublishSample,你需要修改成本機(jī)的配置,類似連接地址等
String broker = "ws://192.168.1.121:8094/mqtt";//地址
需要注意的是,你的topic也要與小程序訂閱的主題一致哦!
運(yùn)行測(cè)試用例,模擬硬件發(fā)送信息
回到小程序的message頁面,你可以看到接收到了消息
tcp-wechat 項(xiàng)目介紹針對(duì)小程序與單片機(jī)硬件執(zhí)行Iot物聯(lián)網(wǎng)通訊(TCP/IP)的一套完整Demo。
啟動(dòng)流程1、啟動(dòng)項(xiàng)目,tcp監(jiān)聽成功
2、運(yùn)行com.myself.nettychat.tcptest.TCPTestClient (記得先改ip或端口,如果你有修改的話)
3、運(yùn)行PostMan,請(qǐng)求下方的API 進(jìn)行通信測(cè)試
Demo場(chǎng)景小程序端選購(gòu)售貨機(jī)中的商品,點(diǎn)擊購(gòu)買(小程序API向Iot中心發(fā)送對(duì)應(yīng)商品的開鎖信息),Iot中心中轉(zhuǎn)開鎖信息給單片機(jī),單片機(jī)接收信息打開對(duì)應(yīng)的鎖。
通信機(jī)制:幀頭+ID+數(shù)據(jù)類型+24把鎖狀態(tài)+crc校驗(yàn)+幀尾(可以按照需求進(jìn)行定制)
com.myself.nettychat.config.TCPServerHandler (通信接收的處理類)API(小程序調(diào)用接口)
http://localhost:8080/susu/back/get_channel_size GET
請(qǐng)求Iot中心,獲取當(dāng)前連接存活狀態(tài)下的鏈接實(shí)例
{ "code": 200, "msg": "成功", "data": 1 }
http://localhost:8080/susu/back/get_channel_id_list GET
請(qǐng)求Iot中心,當(dāng)前存活狀態(tài)下的鏈接Id列表
{ "code": 200, "msg": "成功", "data": [ "F5690137563CC8" ] }
http://localhost:8080/susu/back/send_to_channel POST
參數(shù)
channelId //第二個(gè)API獲取到的鏈接Id
lock //將要打開的第幾把鎖 1-24(看單片機(jī)接入的鎖的數(shù)量)
{ "code": 200, "msg": "成功", "data": "【發(fā)送成功】" }im-api 簡(jiǎn)介
本項(xiàng)目為InChat核心項(xiàng)目,服務(wù)端項(xiàng)目,以API形式作為對(duì)外功能,類似騰訊IM的服務(wù)端作用,本文也將著重講解本項(xiàng)目的各個(gè)API,目前還沒有嵌入Iot通信模塊,僅以WebSocket的聊天室作為初期發(fā)展,需要使用到Iot的朋友可以先去Master項(xiàng)目了解。
swagger-ui前端對(duì)接公告,目前推出API,請(qǐng)均已此文檔說明的為主,其余API非正式版或測(cè)試版,誤用
查看API列表
http://localhost:8080/susu/swagger-ui.htmlAPI列表詳情
1、賬號(hào)注冊(cè)
POST http://loclhost:8080/susu/user/to_register
參數(shù):username(用戶名)
參數(shù):password(密碼)
前端Tip:傳值判斷,參數(shù)均不能為空,密碼限制在前端做判斷
返回碼與信息值返回碼 | 信息內(nèi)容 | 備注 |
---|---|---|
200 | 成功 | |
555 | 參數(shù)錯(cuò)誤 | |
556 | 用戶名存在 |
僅API列表詳情中的API處于可用狀態(tài),其余API請(qǐng)勿使用,暫未基本完成,使用請(qǐng)?jiān)斂次臋n
webrtc一個(gè)基于WebRTC與netty相結(jié)合的語音與視頻流通訊項(xiàng)目。還在構(gòu)建中,,,
關(guān)于分支的想法由于構(gòu)建為分支,是因?yàn)闀簳r(shí)不能全部融合在一起,很多場(chǎng)景暫時(shí)是獨(dú)立的,所以我針對(duì)朋友們的建議,構(gòu)建了不同的分支項(xiàng)目,并且竟可能的實(shí)現(xiàn)其要求的功能。
這些分支不會(huì)被拋棄,我會(huì)在后期將他們整理到真正的正版項(xiàng)目中去。
InChat雛形感謝以上所有的沉淀!??!
項(xiàng)目現(xiàn)在已經(jīng)開始了重構(gòu)與業(yè)務(wù)代碼的抽離,我將把以上的功能全部抽成一個(gè)InChat-Maven包,并配合SpringBoot快速開發(fā)集成。
InChat
A lightweight, efficient communication framework that supports chat and the Internet of Things(一個(gè)輕量級(jí)、高效率的支持聊天與物聯(lián)網(wǎng)的通訊框架)
從8月初到現(xiàn)在已經(jīng)大約已經(jīng)三個(gè)月了,由于一直沒有時(shí)間與精力很好的維護(hù)這個(gè)項(xiàng)目,心里一直有所歉意。再次向每一個(gè)關(guān)注過InChat項(xiàng)目的朋友表示抱歉。
從12月初,準(zhǔn)確的說,應(yīng)該是前幾天開始,InChat已經(jīng)開始進(jìn)行合理的重構(gòu)與演進(jìn)設(shè)計(jì),同時(shí)相關(guān)文檔都會(huì)分享到GitHub上,與本人博客中。
例如想在已經(jīng)開始設(shè)計(jì)的登錄模塊。
開源IM項(xiàng)目-InChat登錄接口設(shè)計(jì)與實(shí)現(xiàn)(基于Netty)
一個(gè)不情之請(qǐng)正如上文中說到的,我很感謝女朋友一直以來的陪伴,作為程序猿來說,是很珍貴的,不過這個(gè)項(xiàng)目的初衷是為了她而做的,而后能等到朋友與線上友人的支持真的是意料之外,再次很感謝各位熱愛開源的朋友。
明天就是她的生日,我希望把InChat繼續(xù)維持下去,作為一個(gè)生日禮物必備的項(xiàng)目報(bào)告一直延續(xù)下去。
如果對(duì)本項(xiàng)目有興趣的,可以加入QQ群:628793702,一起研究討論學(xué)習(xí)。
如果以上有一些對(duì)你有所幫助的話,還請(qǐng)到GitHub對(duì)項(xiàng)目點(diǎn)個(gè)Star。感謝對(duì)每一個(gè)開源者的支持!謝謝。
希望本項(xiàng)目對(duì)你有所幫助,我的目標(biāo)暫定,一個(gè)小眾IM加物聯(lián)網(wǎng)的開源通訊項(xiàng)目。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72359.html
閱讀 3400·2021-11-22 09:34
閱讀 2926·2021-10-09 09:43
閱讀 1484·2021-09-24 09:47
閱讀 2228·2019-08-30 12:53
閱讀 1030·2019-08-29 14:00
閱讀 3417·2019-08-29 13:17
閱讀 2304·2019-08-28 18:00
閱讀 1319·2019-08-26 12:00