咱們整個Demo基本不須要你們花費太多時間,就能夠實現如下的功能。html
- 用戶token登陸校驗
- 自我聊天
- 點對點聊天
- 羣聊
- 獲取在線用戶數與用戶標籤列表
- 發送系統通知
首先,咱們須要介紹一下咱們今天打算採用的框架,InChat : 一個輕量級、高效率的支持多端(應用與硬件Iot)的異步網絡應用通信框架,採用這個框架,咱們基本上只須要兩三個類就能夠實現咱們今天須要的功能了。前端
InChat ,自己不依賴於任何的底層框架,因此你們只要會基本的Java語言就能夠實現一套本身的WebSocket聊天室。java
關於詳細的手冊說明,你們能夠看看官網的介紹:git
<dependency>
<groupId>com.github.UncleCatMySelf</groupId>
<artifactId>InChat</artifactId>
<version>1.1.2</version>
</dependency>
複製代碼
咱們不須要依賴其餘的Maven包,只要本文說起的框架便可。github
<dependency>
<groupId>com.github.UncleCatMySelf</groupId>
<artifactId>InChat</artifactId>
<version>1.1.2</version>
</dependency>
複製代碼
你只須要繼承InChat的默認配置類InitNetty
便可,以下web
public class MyInit extends InitNetty { /** 自定義啓動監聽端口 */ @Override public int getWebport() { return 8090; } } 複製代碼
此接口與原先同樣,僅修改了方法名json
public class DataBaseServiceImpl implements InChatToDataBaseService { @Override public Boolean writeMessage(InChatMessage message) { System.out.println(message.toString()); return true; } } 複製代碼
此接口沒有作過多的修改後端
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; } } 複製代碼
此接口具備Demo模板,用戶須要繼承InChat框架的FromServerService
接口,同時該接口註釋也有實例demo,咱們須要實現一個自定義的枚舉,你能夠這樣寫:瀏覽器
public enum FromServerServiceImpl implements FromServerService { //你能夠自定義本身的系統消息,請以Integer-String的形式 TYPE1(1,"【系統通知】您的帳號存在異常,請注意安全保密信息。"), TYPE2(2,"【系統通知】恭喜您連續登陸超過5天,獎勵5積分。"); private Integer code; private String message; FromServerServiceImpl(Integer code, String message){ this.code = code; this.message = message; } public Integer getCode() { return code; } //實現接口的方法,遍歷本枚舉的code,獲取對應的消息,做爲系統消息發送 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; } } 複製代碼
1.1.2版本的啓動項目變得異常的簡單,你只須要配置啓動的配置工廠便可。安全
public class application { public static void main(String[] args) { //配置你的自定義配置 ConfigFactory.initNetty = new MyInit(); //配置校驗類 ConfigFactory.inChatVerifyService = new VerifyServiceImpl(); //配置消息接收處理類 ConfigFactory.inChatToDataBaseService = new DataBaseServiceImpl(); //配置服務端系統消息枚舉,這裏的值無所謂 TYPE1或者TYPE2或者TYPEN都可以 ConfigFactory.fromServerService = FromServerServiceImpl.TYPE1; //啓動InChat InitServer.open(); } } 複製代碼
啓動成功
DEBUG - -Dio.netty.threadLocalDirectBufferSize: 0 DEBUG - -Dio.netty.maxThreadLocalCharBufferSize: 16384 INFO - 服務端啓動成功【192.168.56.1:8090】 複製代碼
當聊天鏈接未註冊狀況下,客戶端自動斷開後,服務會自動包對應的異常
INFO - [Handler:channelInactive]/192.168.56.1:8090關閉成功 ERROR - [捕獲異常:NotFindLoginChannlException]-[Handler:channelInactive] 關閉未正常註冊連接! 複製代碼
原先的
自我發送
,點對點發送
,羣聊
均與原來同樣
原先的接口說明能夠看上一版本: v1.1.0-alpha版本使用說明
新增HTTP接口三個,在你啓動Inchat的時候,默認啓動,對於你的其餘web API並沒有任何影響,它是一個IM的輔助做用。本版本不支持用戶自定義相關的InChat HTTP接口
獲取在線用戶數
[ip:端口]/get_size
GET{
"code": 200, "data": { "online": 1,//當前在線數 "time": "Jan 3, 2019 10:06:45 PM"//查詢時間 } } 複製代碼
獲取在線用戶標識
[ip:端口]/get_list
GET{
"code": 200, "data": { //返回在線用戶列表 "tokens": [ "1111" ] } } 複製代碼
根據用戶標籤,發送系統指定消息
[ip:端口]/send_from_server
POSTtoken
(你能夠從get_list
中獲得在線用戶標籤)、value
(你在系統中添加枚舉的code
值,這裏不接受字符串){
"code": 400, "data": { "message": "通知發送成功" } } 複製代碼
(有個小BUG,返回值code應該是200)
InChat : 一個輕量級、高效率的支持多端(應用與硬件Iot)的異步網絡應用通信框架,你們能夠直接來這個項目下獲取前端頁面,或者直接訪問這個地址:github.com/UncleCatMyS…
對於這個前端頁面,咱們須要更改一下IP地址。
接下來直接啓動後端項目,當咱們看到如下的信息,則項目啓動成功。
INFO - 服務端啓動成功【192.168.1.121:8090】
複製代碼
這裏的IP須要更換如下讀者啓動後的IP地址。
接着直接用瀏覽器打開chat.html的頁面便可,關於js的方法,你們能夠看看InChatV1.1.0版本使用說明。
運行效果已經提早展現啦!
做者:Java貓說連接:https://juejin.im/post/5c2ebdfe5188252584691825