摘要:前言大家可以看看上一篇用構(gòu)建一個(gè)簡(jiǎn)單的聊天室在上一篇文章中我們已經(jīng)實(shí)現(xiàn)了自我對(duì)話好友交流群聊離線消息等的功能。系統(tǒng)通知恭喜您連續(xù)登錄超過(guò)天,獎(jiǎng)勵(lì)積分。
本文首發(fā)公眾號(hào)與個(gè)人博客:Java貓說(shuō) & 貓叔的博客 | MySelf,轉(zhuǎn)載請(qǐng)申明出處。前言
大家可以看看上一篇:用Java構(gòu)建一個(gè)簡(jiǎn)單的WebSocket聊天室
在上一篇文章中我們已經(jīng)實(shí)現(xiàn)了:自我對(duì)話、好友交流、群聊、離線消息等的功能。
而本篇,我們的框架升級(jí)了,并且開通了幾個(gè)新的HTTP接口功能,同時(shí)也把原先框架的一些異常做了處理。
我們將使用更少的代碼完成功能更加完善的聊天項(xiàng)目!
采用框架我們整個(gè)Demo基本不需要大家花費(fèi)太多時(shí)間,就可以實(shí)現(xiàn)以下的功能。
用戶token登錄校驗(yàn)
自我聊天
點(diǎn)對(duì)點(diǎn)聊天
群聊
獲取在線用戶數(shù)與用戶標(biāo)簽列表
發(fā)送系統(tǒng)通知
首先,我們需要介紹一下我們今天打算采用的框架,InChat : 一個(gè)輕量級(jí)、高效率的支持多端(應(yīng)用與硬件Iot)的異步網(wǎng)絡(luò)應(yīng)用通訊框架,采用這個(gè)框架,我們基本上只需要兩三個(gè)類就可以實(shí)現(xiàn)我們今天需要的功能了。
先看看效果 需要了解SSM & SpringBoot 嗎?InChat ,本身不依賴于任何的底層框架,所以大家只要會(huì)基本的Java語(yǔ)言就可以實(shí)現(xiàn)一套自己的WebSocket聊天室。
框架使用手冊(cè)(新版V1.1.2剛剛發(fā)布)關(guān)于詳細(xì)的手冊(cè)說(shuō)明,大家可以看看官網(wǎng)的介紹:
V1.1.2版本使用說(shuō)明
V1.1.2版本視頻教學(xué)
開始Demo搭建 構(gòu)建一個(gè)空的Maven項(xiàng)目com.github.UncleCatMySelf InChat 1.1.2
我們不需要依賴其他的Maven包,只要本文提及的框架即可。
InChat啟動(dòng)參數(shù)可以自配置com.github.UncleCatMySelf InChat 1.1.2
你只需要繼承InChat的默認(rèn)配置類InitNetty即可,如下
public class MyInit extends InitNetty { /** 自定義啟動(dòng)監(jiān)聽端口 */ @Override public int getWebport() { return 8090; } }獲取聊天消息數(shù)據(jù)
此接口與原先一樣,僅修改了方法名
public class DataBaseServiceImpl implements InChatToDataBaseService { @Override public Boolean writeMessage(InChatMessage message) { System.out.println(message.toString()); return true; } }登錄校驗(yàn)與群聊消息
此接口沒(méi)有做過(guò)多的修改
public class VerifyServiceImpl implements InChatVerifyService { @Override public boolean verifyToken(String token) { return true; } @Override public JSONArray getArrayByGroupId(String groupId) { JSONArray jsonArray = JSONArray.parseArray("["1111","2222","3333"]"); return jsonArray; } }服務(wù)端發(fā)送通知消息枚舉類
此接口具有Demo模板,用戶需要繼承InChat框架的FromServerService接口,同時(shí)該接口注釋也有實(shí)例demo,我們需要實(shí)現(xiàn)一個(gè)自定義的枚舉,你可以這樣寫:
public enum FromServerServiceImpl implements FromServerService { //你可以自定義自己的系統(tǒng)消息,請(qǐng)以Integer-String的形式 TYPE1(1,"【系統(tǒng)通知】您的賬號(hào)存在異常,請(qǐng)注意安全保密信息。"), TYPE2(2,"【系統(tǒng)通知】恭喜您連續(xù)登錄超過(guò)5天,獎(jiǎng)勵(lì)5積分。"); private Integer code; private String message; FromServerServiceImpl(Integer code, String message){ this.code = code; this.message = message; } public Integer getCode() { return code; } //實(shí)現(xiàn)接口的方法,遍歷本枚舉的code,獲取對(duì)應(yīng)的消息,作為系統(tǒng)消息發(fā)送 public String findByCode(Object code) { Integer codes = (Integer)code; for (FromServerServiceImpl item: FromServerServiceImpl.values()) { if (item.code == codes){ return item.message; } } return null; } public void setCode(Integer code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }啟動(dòng)項(xiàng)目
1.1.2版本的啟動(dòng)項(xiàng)目變得異常的簡(jiǎn)單,你只需要配置啟動(dòng)的配置工廠即可。
public class application { public static void main(String[] args) { //配置你的自定義配置 ConfigFactory.initNetty = new MyInit(); //配置校驗(yàn)類 ConfigFactory.inChatVerifyService = new VerifyServiceImpl(); //配置消息接收處理類 ConfigFactory.inChatToDataBaseService = new DataBaseServiceImpl(); //配置服務(wù)端系統(tǒng)消息枚舉,這里的值無(wú)所謂 TYPE1或者TYPE2或者TYPEN均可以 ConfigFactory.fromServerService = FromServerServiceImpl.TYPE1; //啟動(dòng)InChat InitServer.open(); } }項(xiàng)目效果
啟動(dòng)成功
DEBUG - -Dio.netty.threadLocalDirectBufferSize: 0 DEBUG - -Dio.netty.maxThreadLocalCharBufferSize: 16384 INFO - 服務(wù)端啟動(dòng)成功【192.168.56.1:8090】
當(dāng)聊天連接未注冊(cè)情況下,客戶端自動(dòng)斷開后,服務(wù)會(huì)自動(dòng)包對(duì)應(yīng)的異常
INFO - [Handler:channelInactive]/192.168.56.1:8090關(guān)閉成功 ERROR - [捕獲異常:NotFindLoginChannlException]-[Handler:channelInactive] 關(guān)閉未正常注冊(cè)鏈接!
原先的自我發(fā)送,點(diǎn)對(duì)點(diǎn)發(fā)送,群聊均與原來(lái)一樣新功能添加 HTTP原先的接口說(shuō)明可以看上一版本: v1.1.0-alpha版本使用說(shuō)明
新增HTTP接口三個(gè),在你啟動(dòng)Inchat的時(shí)候,默認(rèn)啟動(dòng),對(duì)于你的其他web API并無(wú)任何影響,它是一個(gè)IM的輔助作用。本版本不支持用戶自定義相關(guān)的InChat HTTP接口
獲取在線用戶數(shù)
地址:[ip:端口]/get_size GET
返回值
{ "code": 200, "data": { "online": 1,//當(dāng)前在線數(shù) "time": "Jan 3, 2019 10:06:45 PM"http://查詢時(shí)間 } }
獲取在線用戶標(biāo)識(shí)
地址:[ip:端口]/get_list GET
返回值
{ "code": 200, "data": { //返回在線用戶列表 "tokens": [ "1111" ] } }
根據(jù)用戶標(biāo)簽,發(fā)送系統(tǒng)指定消息
地址:[ip:端口]/send_from_server POST
參數(shù):token(你可以從get_list中得到在線用戶標(biāo)簽)、value(你在系統(tǒng)中添加枚舉的code值,這里不接受字符串)
返回值
{ "code": 400, "data": { "message": "通知發(fā)送成功" } }
(有個(gè)小BUG,返回值code應(yīng)該是200)
關(guān)于前端InChat : 一個(gè)輕量級(jí)、高效率的支持多端(應(yīng)用與硬件Iot)的異步網(wǎng)絡(luò)應(yīng)用通訊框架,大家可以直接來(lái)這個(gè)項(xiàng)目下獲取前端頁(yè)面,或者直接訪問(wèn)這個(gè)地址:https://github.com/UncleCatMy...
對(duì)于這個(gè)前端頁(yè)面,我們需要更改一下IP地址。
運(yùn)行調(diào)試項(xiàng)目接下來(lái)直接啟動(dòng)后端項(xiàng)目,當(dāng)我們看到以下的信息,則項(xiàng)目啟動(dòng)成功。
INFO - 服務(wù)端啟動(dòng)成功【192.168.1.121:8090】
這里的IP需要更換以下讀者啟動(dòng)后的IP地址。
接著直接用瀏覽器打開chat.html的頁(yè)面即可,關(guān)于js的方法,大家可以看看InChatV1.1.0版本使用說(shuō)明。
運(yùn)行效果已經(jīng)提前展示啦!
公眾號(hào):Java貓說(shuō)現(xiàn)架構(gòu)設(shè)計(jì)(碼農(nóng))兼創(chuàng)業(yè)技術(shù)顧問(wèn),不羈平庸,熱愛(ài)開源,雜談程序人生與不定期干貨。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72820.html
摘要:會(huì)話管理一直是企業(yè)級(jí)應(yīng)用的重要部分。傳統(tǒng)會(huì)話管理技術(shù)的問(wèn)題的目的是解決傳統(tǒng)的會(huì)話管理技術(shù)的各種問(wèn)題。對(duì)如和之類的閉源產(chǎn)品,找到適合它們的會(huì)話管理技術(shù)的替代實(shí)現(xiàn)則通常是不可能的。典型的應(yīng)用會(huì)將當(dāng)前用戶的身份及其安全級(jí)別或角色存儲(chǔ)在會(huì)話里面。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 本文來(lái)自云+社區(qū)翻譯社,由Tnecesoc編譯。 會(huì)話管理一直是 Java 企業(yè)級(jí)應(yīng)用的...
摘要:開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問(wèn)題前后端分離二使用完美處理權(quán)限問(wèn)題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...
摘要:官網(wǎng)地址聊天機(jī)器人插件開發(fā)實(shí)例教程一創(chuàng)建插件在系統(tǒng)技巧使你的更加專業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。我會(huì)簡(jiǎn)單基于的簡(jiǎn)潔視頻播放器組件前端掘金使用和實(shí)現(xiàn)購(gòu)物車場(chǎng)景前端掘金本文是上篇文章的序章,一直想有機(jī)會(huì)再次實(shí)踐下。 2道面試題:輸入U(xiǎn)RL按回車&HTTP2 - 掘金通過(guò)幾輪面試,我發(fā)現(xiàn)真正那種問(wèn)答的技術(shù)面,寫一堆項(xiàng)目真不如去刷技術(shù)文章作用大,因此刷了一段時(shí)間的博客和掘金,整理下曾經(jīng)被...
閱讀 943·2023-04-25 18:51
閱讀 1916·2021-09-09 11:39
閱讀 3311·2019-08-30 15:53
閱讀 2119·2019-08-30 13:03
閱讀 1334·2019-08-29 16:17
閱讀 604·2019-08-29 11:33
閱讀 1916·2019-08-26 14:00
閱讀 2145·2019-08-26 13:41