摘要:大家明天一起去唱吧關于數(shù)據(jù)庫設計當前一版不會固定大家的數(shù)據(jù)庫設計,大家可以自己自由設計,同時搭上自己的項目,構(gòu)建一個附帶的自項目。
InChat 一個IM通訊框架
一個輕量級、高效率的支持多端(應用與硬件Iot)的異步網(wǎng)絡應用通訊框架。(核心底層Netty)
Github:InChat
版本目標:完成基本的消息通訊(僅支持文本消息),離線消息存儲,歷史消息查詢,一對一聊天、自我聊天、群聊等。
你可以使用InChat,快速搭建一個基于SpringBoot的IM項目,而且沒有任何硬性要求,你完全可以兼容自己原有的項目。
v1.0.0版本使用說明 關于InChat的Maven依賴fastjson 》 1.2.53
gson 》 2.8.5
netty 》 4.1.32.Final
commons-lang 》 3.5
aspectj 》 1.9.2
lombok 》 1.18.4
spring-boot 》 2.0.2.RELEASE
spring-boot-starter-websocket
關于一版依舊使用SpringBoot的環(huán)境,同時為應用注入了web環(huán)境,引入InChat依賴包后,對于SpringBoot相關的web可以無需引入,同時請注意相關版本的兼容性。
引入InChat默認可以自動運行web環(huán)境。
創(chuàng)建一個空的Maven項目,并引入InChatMaven包,(注意,請不要使用與本項目相同的包目錄)。
可能你只需要這樣的Maven依賴即可
注入InChat的項目到自身項目中com.github.UncleCatMySelf InChat 1.0-alpha org.springframework.boot spring-boot-starter-test test
你可能需要在你的項目上進行報掃描
@SpringBootApplication @ComponentScan({"com.inchat"}) //你的demo包目錄 @ComponentScan({"com.github.unclecatmyself"}) //InChat的包目錄 --請將InChat的放到最下面 public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }對接InChat的接口與實現(xiàn)
這次你僅需寫兩個實現(xiàn)接口即可啦!!!
@Service public class ToDataBaseServiceImpl implements InChatToDataBaseService{ @Override public Boolean writeMapToDB(Mapmaps) { //異步寫入數(shù)據(jù)庫 System.out.println(maps.toString()); return true; } }
這個接口是每個人通訊的信息,InChat自帶實現(xiàn)了異步的數(shù)據(jù)外拋得接口InChatToDataBaseService,目前一版只有一個方法,
就是上面得writeMapToDB,你僅需要map的內(nèi)容轉(zhuǎn)為對應的對象(一版還沒提供對應的轉(zhuǎn)換類,下一版對提供),并將數(shù)據(jù)存入自己喜歡的數(shù)據(jù)庫中。
如果數(shù)據(jù)并發(fā)大,也可以先放到MQ中,再寫入數(shù)據(jù)庫。
@Service public class verifyServiceImpl implements InChatVerifyService { @Override public boolean verifyToken(String token) { //登錄校驗 return true; } @Override public JSONArray getArrayByGroupId(String groupId) { //根據(jù)群聊id獲取對應的群聊人員ID JSONArray jsonArray = JSONArray.parseArray("["1111","2222","3333"]"); return jsonArray; } }
這個接口是InChat的校驗層實現(xiàn),對于Token的校驗就是,verifyToken,websocket鏈接的時候,你將在初次做登錄校驗,你可以將從InChat拿到的websocket傳過來的
Token,你可以與自己的用戶登錄的token做校驗,返回true,則用戶成功鏈接InChat。
關于getArrayByGroupId,目前是否應該放在這個接口中還有待確定,不過目前一版暫時這樣,你可以去數(shù)據(jù)庫中查詢對應的群聊id所對應的人員ID(或Token),并返回對應的
JSONArray即可啦。
自定義配置InChat參數(shù)這個你可以直接在application中按照自己的意思配置,不過你最好先了解netty
啟動項目接著啟動項目即可啦
當你看到這個日志就標志著Inchat搭建成功了!!!
2018-12-14 10:29:09.269 INFO 4920 --- [ BOSS_1] c.g.u.bootstrap.NettyBootstrapServer : 服務端啟動成功【192.168.1.121:8090】關于前端
這里你可以來到InChat的Front-End-Testing文檔夾中的chat.html。
你可以直接使用,你進需要修改對應的對接IP即可。
關于前端的js暫時還是模板關于登錄
你會看到chat.html中的登錄按鈕對應的js
function send(value) { if (!window.WebSocket) { return; } if (socket.readyState == WebSocket.OPEN) { var message = { type: "login", //與InChat對應的 不可修改 token: "1111" } socket.send(JSON.stringify(message)); } else { alert("連接沒有開啟."); } }
本demo,默認登錄的Token是“1111”,關于用戶校驗則直接返回true即可。
登錄成功,返回以下內(nèi)容。(不需要顯示給用戶看)
{"success":"true","type":"login"}
InChat不會有登錄記錄
發(fā)送給自己你會看到chat.html中的登錄按鈕對應的js
function sendToMe(value) { if (!window.WebSocket) { return; } if (socket.readyState == WebSocket.OPEN) { var message = { type: "sendMe", //與InChat對應的 不可修改 value: value, //發(fā)送的內(nèi)容 token: "1111" //發(fā)送用戶的token } socket.send(JSON.stringify(message)); } else { alert("連接沒有開啟."); } }
發(fā)送成功,InChat返回內(nèi)容.(你僅需將value顯示到前端即可)
{"type":"sendMe","value":"發(fā)送給自己的內(nèi)容"}
InChat消息記錄,你將在異步消息中接受到InChat傳遞給你的用戶通訊消息,你可以進行對應的入庫操作
{"time":"2018-12-14 10:56:24","type":"sendMe","value":"發(fā)送給自己的內(nèi)容","token":"1111"}發(fā)送給某人
你會看到chat.html中的登錄按鈕對應的js
function sendToOne(value) { if (!window.WebSocket) { return; } if (socket.readyState == WebSocket.OPEN) { var message = { type : "sendTo", //與InChat對應的 不可修改 token : "1111", //發(fā)送用戶Token value: value, //發(fā)送內(nèi)容 one: "2222", //接受用戶Token(唯一標識) } socket.send(JSON.stringify(message)); } else { alert("連接沒有開啟."); } }
發(fā)送成功,接受的用戶是否登錄,你都能接受到返回信息。(value應用于自己界面展示)
{"one":"2222","type":"sendTo","value":"發(fā)送給朋友的內(nèi)容"}
但是用戶那邊就不一樣了。
登錄正常在線。
{"from":"1111","type":"sendTo","value":"發(fā)送給朋友的內(nèi)容"}
離線接受不到信息
InChat異步消息推送,你可以看到兩種
在線: {"one":"2222","time":"2018-12-14 11:01:36","type":"sendTo","value":"發(fā)送給朋友的內(nèi)容","token":"1111"}
離線: {"one":"2222","time":"2018-12-14 10:59:04","on_online":"2222","type":"sendTo","value":"發(fā)送給朋友的內(nèi)容","token":"1111"}
如果出現(xiàn)用戶發(fā)送給用戶的狀態(tài)是離線的,則會在消息多出on_online的字段,該字段的內(nèi)容就是離線用戶的Token,你可以針對性的數(shù)據(jù)入庫,并在用戶上線的時候,讀寫信息的時候,有一個未讀消息的狀態(tài)。
發(fā)送群聊你會看到chat.html中的登錄按鈕對應的js
function sendGroup(value) { if (!window.WebSocket) { return; } if (socket.readyState == WebSocket.OPEN) { var message = { type: "sendGroup", //與InChat對應的 不可修改 groupId: "2", //群聊ID token: "1111", //發(fā)送用戶的Token value: value //發(fā)送的消息 } socket.send(JSON.stringify(message)); } else { alert("連接沒有開啟."); } }
發(fā)送成功,本人將接受到消息
{"groupId":"2","from":"1111","type":"sendGroup","value":"大家明天一起去唱K吧"}
群組中有些人在線接受、離線不接受
在線:{"groupId":"2","from":"1111","type":"sendGroup","value":"大家明天一起去唱K吧"}
InChat異步消息入庫,群組只會異步給你一個消息,你可以看到on_online中,3333用戶是沒有接受到信息的,所以你可以在他上線發(fā)送未讀消息。
{"groupId":"2","time":"2018-12-14 11:09:17","on_online":["3333"],"type":"sendGroup","value":"大家明天一起去唱K吧","token":"1111"}關于數(shù)據(jù)庫設計
當前一版不會固定大家的數(shù)據(jù)庫設計,大家可以自己自由設計,同時搭上自己的項目,構(gòu)建一個附帶IM的自項目。前端效果
發(fā)送人
接收人
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72683.html
摘要:前言大家可以看看上一篇用構(gòu)建一個簡單的聊天室在上一篇文章中我們已經(jīng)實現(xiàn)了自我對話好友交流群聊離線消息等的功能。系統(tǒng)通知恭喜您連續(xù)登錄超過天,獎勵積分。 本文首發(fā)公眾號與個人博客:Java貓說 & 貓叔的博客 | MySelf,轉(zhuǎn)載請申明出處。 前言 大家可以看看上一篇:用Java構(gòu)建一個簡單的WebSocket聊天室 在上一篇文章中我們已經(jīng)實現(xiàn)了:自我對話、好友交流、群聊、離線消息等...
摘要:一個輕量級高效率的支持聊天與物聯(lián)網(wǎng)的通訊框架從月初到現(xiàn)在已經(jīng)大約已經(jīng)三個月了,由于一直沒有時間與精力很好的維護這個項目,心里一直有所歉意。希望本項目對你有所幫助,我的目標暫定,一個小眾加物聯(lián)網(wǎng)的開源通訊項目。 篇幅較長,感謝閱讀。 萬事開頭難 在我決定做開源是因為自身工作接觸到大多數(shù)的項目都是基于開源大佬寫的框架,自覺慚愧,工作以來一直忙于業(yè)務與功能實現(xiàn),多多少少做過的幾個項目也沒能抽...
摘要:愷英網(wǎng)絡程序經(jīng)理張皓聰在上,做了直播平臺系統(tǒng)實戰(zhàn)的主題分享,介紹了直播平臺系統(tǒng)的搭建過程。張皓聰年加入愷英網(wǎng)絡,先后負責過多款手游頁游項目,對和有深入研究。確保所有的壓力是平均的。 分享 | 張皓聰(愷英網(wǎng)絡程序經(jīng)理) 整理 | 西北 2016年10月29日,由又拍云舉辦的Open Talk No.26在魔都上海3W空間成功舉辦,此次活動主要邀請直播領域開發(fā)一線的技術(shù)大神們聊一聊直播平...
閱讀 2978·2023-04-25 19:45
閱讀 2695·2021-11-19 09:40
閱讀 701·2021-10-14 09:49
閱讀 2702·2021-09-30 09:47
閱讀 2230·2021-09-26 09:55
閱讀 1231·2021-09-22 16:01
閱讀 2817·2019-08-30 14:19
閱讀 711·2019-08-29 16:44