成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

如何做一個自己的開源聊天項目?(仿微信)

Zachary / 2609人閱讀

摘要:一個輕量級高效率的支持聊天與物聯(lián)網(wǎng)的通訊框架從月初到現(xiàn)在已經(jīng)大約已經(jīng)三個月了,由于一直沒有時間與精力很好的維護(hù)這個項目,心里一直有所歉意。希望本項目對你有所幫助,我的目標(biāo)暫定,一個小眾加物聯(lián)網(wǎng)的開源通訊項目。

篇幅較長,感謝閱讀。
萬事開頭難

在我決定做開源是因為自身工作接觸到大多數(shù)的項目都是基于開源大佬寫的框架,自覺慚愧,工作以來一直忙于業(yè)務(wù)與功能實現(xiàn),多多少少做過的幾個項目也沒能抽出部分好一點的功能業(yè)務(wù)Maven包什么的提供也同行使用或借鑒,這實在是有悖于自己的初心。

決定做開源是今年(2018)7月末的時候,自己曾做的一個Iot項目剛剛被幾個網(wǎng)上的朋友問到,并尋求源碼,那么久做了一個Demo,并放到了GitHub上。

之后感覺應(yīng)該做一個有自己情感注入的項目才行,而不是工作上的現(xiàn)實交易的項目,我想做一個屬于自己的項目,有意義的項目。

當(dāng)時還在創(chuàng)業(yè)階段,給自己的時間也不多,所以能想到做什么也確實是想法有限,更重要的是時間也有限。

謝謝一個人,讓我有了一個Idea去做一個項目,她經(jīng)常說工作后什么話都不能輕易說,偶爾沒有自己的空間去抒發(fā)自己的情緒,當(dāng)時想到的是做一個個人樹洞的東西,但是那有點產(chǎn)品性,且有點不好給同行們借鑒。而我在創(chuàng)業(yè)時也剛剛好接觸到netty,之后用netty做了一個Iot物聯(lián)網(wǎng)項目,現(xiàn)在想到就是順便提升自己的能力,將netty運用并熟悉掌握起來,做一個聊天室吧,一開始想法局限,就是一個在線聊天室。

初始項目演進(jìn)

沒錯,一開始就是一個項目式的形式,我很快的完成了一個聊天的功能,并打了一個tag包?,F(xiàn)在的地址是:demo。
下載地址:demo

1.0.0版本詳情介紹

我實現(xiàn)了用戶登錄、聊天歷史、隨機(jī)用戶名、異步數(shù)據(jù)寫入等基本功能。
登錄是隨機(jī)分配的用戶名,聊天數(shù)據(jù)會緩存本地,channel斷開(用戶離線的時候就執(zhí)行異步任務(wù)去存儲數(shù)據(jù),在登錄界面時就讀取數(shù)據(jù)庫數(shù)據(jù))


1.2.0版本

修復(fù)聊天記錄功能,實現(xiàn)重復(fù)信息錄入,完善前端頁面,回車監(jiān)聽等,對于前版本的本地緩存Map類型選用錯誤,對重復(fù)數(shù)據(jù)無法存儲


1.3.0版本

用戶注冊登錄功能,系統(tǒng)聊天綁定用戶,禁止二次登錄等,前端頁面大改,用戶登錄后,id和channel一一對應(yīng),當(dāng)出現(xiàn)二次id登錄且channel不同時,視為二次登錄。



1.4.1版本

本人主導(dǎo)SUI Mobile構(gòu)建仿微信樣式頁面版,使用時開F12手機(jī)界面,修改前端樣式。

1.5.2版本

TCP/IP軟硬件通信-單片機(jī)等應(yīng)用的TCP通信,Netty處理二進(jìn)制圖片發(fā)送聊天功能,前言說到的Iot物聯(lián)網(wǎng)項目的功能添加。

1.5.8 版本

MQTT協(xié)議軟硬件通信等,Iot物聯(lián)網(wǎng),這個暫時被提取為分支模塊。

1.6.0 版本

API調(diào)用Netty長鏈接執(zhí)行發(fā)送消息(在線數(shù)、用戶列表)詳情地址

即可以以系統(tǒng)身份想在線channel發(fā)送數(shù)據(jù)。


到此,產(chǎn)品項目分支到一段落,到了這個時候項目已經(jīng)積累了十多個參與者(QQ群:628793702),在QQ群貢獻(xiàn)一些他們的建議與在工作中遇到的問題。

GitHub地址:InChat
A lightweight, efficient communication framework that supports chat and the Internet of Things(一個輕量級、高效率的支持聊天與物聯(lián)網(wǎng)的通訊框架)
分支開啟之路 paho-mqtt分支

感謝一個在成都的朋友提供的業(yè)務(wù)場景,需要小程序參與控制Iot物聯(lián)網(wǎng),并使用MQTT的場景。

本Demo是小程序端的Iot案例簡單實現(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)

本項目使用的paho.js的mqtt連接形式,所以protocol要選擇MQTT_WS_PAHO。項目目前是未加密的,啟動ssl本案例暫時不能通訊。
默認(rèn)直接啟動項目就好。

項目啟動后的地址 :ws://192.168.1.121:8094/mqtt

ws、與后綴mqtt是com.myself.nettychat.bootstrap.AbstractBootstrapServer.java中的配置

小程序配置

你需要小程序開發(fā)者工具,并默認(rèn)認(rèn)定你是具備基本的小程序開發(fā)經(jīng)驗的開發(fā)者,這里省略部分的基本配置,你只需要將本分支中wechat-client文件夾中的文件完全復(fù)制到你新建的小程序項目即可,調(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)和項目啟動的一致,你需要在小程序的連接頁面填寫你的
IP:端口

然后就連接成功了,接著你可以在subscribe頁面訂閱一個主題,本Demo是訂閱TEST。

Java模擬MQtt客戶端

運行test中的com.myself.nettychat.MqttPublishSample,你需要修改成本機(jī)的配置,類似連接地址等

String broker       = "ws://192.168.1.121:8094/mqtt";//地址

需要注意的是,你的topic也要與小程序訂閱的主題一致哦!

運行測試用例,模擬硬件發(fā)送信息


測試

回到小程序的message頁面,你可以看到接收到了消息

tcp-wechat 項目介紹

針對小程序與單片機(jī)硬件執(zhí)行Iot物聯(lián)網(wǎng)通訊(TCP/IP)的一套完整Demo。

啟動流程

1、啟動項目,tcp監(jiān)聽成功

2、運行com.myself.nettychat.tcptest.TCPTestClient (記得先改ip或端口,如果你有修改的話)

3、運行PostMan,請求下方的API 進(jìn)行通信測試

Demo場景

小程序端選購售貨機(jī)中的商品,點擊購買(小程序API向Iot中心發(fā)送對應(yīng)商品的開鎖信息),Iot中心中轉(zhuǎn)開鎖信息給單片機(jī),單片機(jī)接收信息打開對應(yīng)的鎖。

通信機(jī)制:幀頭+ID+數(shù)據(jù)類型+24把鎖狀態(tài)+crc校驗+幀尾(可以按照需求進(jìn)行定制)

com.myself.nettychat.config.TCPServerHandler (通信接收的處理類)
API(小程序調(diào)用接口)
http://localhost:8080/susu/back/get_channel_size  GET

請求Iot中心,獲取當(dāng)前連接存活狀態(tài)下的鏈接實例

{
    "code": 200,
    "msg": "成功",
    "data": 1
}
http://localhost:8080/susu/back/get_channel_id_list  GET

請求Iot中心,當(dāng)前存活狀態(tài)下的鏈接Id列表

{
    "code": 200,
    "msg": "成功",
    "data": [
        "F5690137563CC8"
    ]
}
http://localhost:8080/susu/back/send_to_channel  POST

參數(shù)

channelId //第二個API獲取到的鏈接Id

lock //將要打開的第幾把鎖 1-24(看單片機(jī)接入的鎖的數(shù)量)

{
    "code": 200,
    "msg": "成功",
    "data": "【發(fā)送成功】"
}
im-api 簡介

本項目為InChat核心項目,服務(wù)端項目,以API形式作為對外功能,類似騰訊IM的服務(wù)端作用,本文也將著重講解本項目的各個API,目前還沒有嵌入Iot通信模塊,僅以WebSocket的聊天室作為初期發(fā)展,需要使用到Iot的朋友可以先去Master項目了解。

swagger-ui

前端對接公告,目前推出API,請均已此文檔說明的為主,其余API非正式版或測試版,誤用
查看API列表

http://localhost:8080/susu/swagger-ui.html
API列表詳情

1、賬號注冊

POST  http://loclhost:8080/susu/user/to_register

參數(shù):username(用戶名)

參數(shù):password(密碼)

前端Tip:傳值判斷,參數(shù)均不能為空,密碼限制在前端做判斷

返回碼與信息值
返回碼 信息內(nèi)容 備注
200 成功
555 參數(shù)錯誤
556 用戶名存在
提示

僅API列表詳情中的API處于可用狀態(tài),其余API請勿使用,暫未基本完成,使用請詳看文檔

webrtc

一個基于WebRTC與netty相結(jié)合的語音與視頻流通訊項目。還在構(gòu)建中,,,

關(guān)于分支的想法

由于構(gòu)建為分支,是因為暫時不能全部融合在一起,很多場景暫時是獨立的,所以我針對朋友們的建議,構(gòu)建了不同的分支項目,并且竟可能的實現(xiàn)其要求的功能。

這些分支不會被拋棄,我會在后期將他們整理到真正的正版項目中去。

InChat雛形

感謝以上所有的沉淀?。。?/p>

項目現(xiàn)在已經(jīng)開始了重構(gòu)與業(yè)務(wù)代碼的抽離,我將把以上的功能全部抽成一個InChat-Maven包,并配合SpringBoot快速開發(fā)集成。

InChat
A lightweight, efficient communication framework that supports chat and the Internet of Things(一個輕量級、高效率的支持聊天與物聯(lián)網(wǎng)的通訊框架)

從8月初到現(xiàn)在已經(jīng)大約已經(jīng)三個月了,由于一直沒有時間與精力很好的維護(hù)這個項目,心里一直有所歉意。再次向每一個關(guān)注過InChat項目的朋友表示抱歉。

從12月初,準(zhǔn)確的說,應(yīng)該是前幾天開始,InChat已經(jīng)開始進(jìn)行合理的重構(gòu)與演進(jìn)設(shè)計,同時相關(guān)文檔都會分享到GitHub上,與本人博客中。

例如想在已經(jīng)開始設(shè)計的登錄模塊。

開源IM項目-InChat登錄接口設(shè)計與實現(xiàn)(基于Netty)

一個不情之請

正如上文中說到的,我很感謝女朋友一直以來的陪伴,作為程序猿來說,是很珍貴的,不過這個項目的初衷是為了她而做的,而后能等到朋友與線上友人的支持真的是意料之外,再次很感謝各位熱愛開源的朋友。

明天就是她的生日,我希望把InChat繼續(xù)維持下去,作為一個生日禮物必備的項目報告一直延續(xù)下去。

如果對本項目有興趣的,可以加入QQ群:628793702,一起研究討論學(xué)習(xí)。

如果以上有一些對你有所幫助的話,還請到GitHub對項目點個Star。感謝對每一個開源者的支持!謝謝。

希望本項目對你有所幫助,我的目標(biāo)暫定,一個小眾IM加物聯(lián)網(wǎng)的開源通訊項目。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/72359.html

相關(guān)文章

發(fā)表評論

0條評論

閱讀需要支付1元查看
<