首先對於一個簡單的聊天室,你們應該都有必定的概念了,這裏咱們省略用戶模塊的講解,而是單純的先說說聊天室的幾個功能:自我對話、好友交流、羣聊、離線消息等。html
今天咱們要作的demo就能幫咱們作到這一點啦!!!前端
咱們整個Demo基本不須要你們花費太多時間,就能夠實現以上的幾個功能。java
首先,咱們須要介紹一下咱們今天打算採用的框架,InChat : 一個輕量級、高效率的支持多端(應用與硬件Iot)的異步網絡應用通信框架,採用這個框架,咱們基本上只須要兩三個類就能夠實現咱們今天須要的功能了。git
InChat ,自己不依賴於任何的底層框架,因此你們只要會基本的Java語言就能夠實現一套本身的WebSocket聊天室。github
關於詳細的手冊說明,你們能夠看看官網的介紹:InChatV1.1.0版本使用說明web
咱們不須要依賴其餘的Maven包,只要本文說起的框架便可。json
com.github.UncleCatMySelfInChat1.1.0-alpha
一個是框架提供給咱們用戶進行數據保存與讀取的,經過這個接口的實現,咱們能夠異步拿到每一個聊天的通訊數據。這裏的InChatMessage是一個框架自定義的通訊對象。後端
public class ToDataBaseServiceImpl implements InChatToDataBaseService{ @Override public Boolean writeMapToDB(InChatMessage message) { System.out.println(message.toString()); return true; } }
還有一個接口是對登陸的校驗(這裏咱們審理用戶登陸與校驗模塊,因此直接返回true便可),還有一個是返回羣聊的數組信息。數組
public class verifyServiceImpl implements InChatVerifyService { @Override public boolean verifyToken(String token) { //登陸校驗 return true; } @Override public JSONArray getArrayByGroupId(String groupId) { //根據羣聊id獲取對應的羣聊人員ID JSONArray jsonArray = JSONArray.parseArray("[\"1111\",\"2222\",\"3333\"]"); return jsonArray; } }
咱們能夠再詳細的說下,獲取羣聊信息,是經過一個groupId來獲取對應的用戶Id數組,咱們能夠本身作一個數據查詢。瀏覽器
直接上代碼,而後咱們再講解一下。
public class DemoApplication { public static void main(String[] args) { //配置InChat配置工廠 ConfigFactory.inChatToDataBaseService = new ToDataBaseServiceImpl(); ConfigFactory.inChatVerifyService = new verifyServiceImpl(); //默認啓動InChat InitServer initServer = new InitServer(new InitNetty()); initServer.open(); //獲取用戶值 WebSocketChannelService webSocketChannelService = new WebSocketChannelService(); //啓動新線程 new Thread(new Runnable() { @Override public void run() { //設定默認服務器發送值 Map map = new HashMap<>(); map.put("server","服務器"); //獲取控制檯用戶想發送的用戶Token Scanner scanner = new Scanner(System.in); String token = scanner.nextLine(); //獲取用戶鏈接 Channel channel = (Channel) webSocketChannelService.getChannel(token); //調用接口發送 webSocketChannelService.sendFromServer(channel,map); } }).start(); } }
好了,以上已經基本完成了咱們的聊天室Demo了,是否是很簡單!?
首先,咱們將實現的兩個類,配置到框架的配置工廠中,而後啓動框架便可,相關的類,都是框架提供的。下面的線程是一個框架的接口,以服務器第一人稱發送給針對用戶通知信息,輸入「1111」,Demo演示的用戶token值。
InChat : 一個輕量級、高效率的支持多端(應用與硬件Iot)的異步網絡應用通信框架,你們能夠直接來這個項目下獲取前端頁面,或者直接訪問這個地址:https://github.com/UncleCatMy...
對於這個前端頁面,咱們須要更改一下IP地址。
接下來直接啓動後端項目,當咱們看到如下的信息,則項目啓動成功。
INFO - 服務端啓動成功【192.168.1.121:8090】
這裏的IP須要更換如下讀者啓動後的IP地址。
接着直接用瀏覽器打開chat.html的頁面便可,關於js的方法,你們能夠看看InChatV1.1.0版本使用說明。
運行效果以下:
INFO - 服務端啓動成功【192.168.1.121:8090】 DEBUG - -Dio.netty.buffer.bytebuf.checkAccessible: true DEBUG - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@68ad4247 INFO - [DefaultWebSocketHandler.channelActive]/192.168.1.121:17330連接成功 DEBUG - -Dio.netty.recycler.maxCapacityPerThread: 4096 DEBUG - -Dio.netty.recycler.maxSharedCapacityFactor: 2 DEBUG - -Dio.netty.recycler.linkCapacity: 16 DEBUG - -Dio.netty.recycler.ratio: 8 DEBUG - [id: 0xabb0dbad, L:/192.168.1.121:8090 - R:/192.168.1.121:17330] WebSocket version V13 server handshake DEBUG - WebSocket version 13 server handshake key: JYErdeATDgbPmgK0mZ+IlQ==, response: YK9ZiJehNP+IwtlkpoVkPt94yWY= DEBUG - Decoding WebSocket Frame opCode=1 DEBUG - Decoding WebSocket Frame length=31 INFO - [DefaultWebSocketHandler.textdoMessage.LOGIN] DEBUG - Encoding WebSocket Frame opCode=1 length=33 DEBUG - Decoding WebSocket Frame opCode=1 DEBUG - Decoding WebSocket Frame length=43 INFO - [DefaultWebSocketHandler.textdoMessage.SENDME] 1111 DEBUG - Encoding WebSocket Frame opCode=1 length=28 INFO - 【異步寫入數據】 InChatMessage{time=Mon Dec 24 10:03:00 CST 2018, type='sendMe', value='', token='1111', groudId='null', online='null', onlineGroup=null, one='null'} DEBUG - Decoding WebSocket Frame opCode=1 DEBUG - Decoding WebSocket Frame length=56 INFO - [DefaultWebSocketHandler.textdoMessage.SENDTO] 1111 DEBUG - Encoding WebSocket Frame opCode=1 length=41 INFO - 【異步寫入數據】 InChatMessage{time=Mon Dec 24 10:03:01 CST 2018, type='sendTo', value='', token='1111', groudId='null', online='2222', onlineGroup=null, one='2222'} DEBUG - Decoding WebSocket Frame opCode=1 DEBUG - Decoding WebSocket Frame length=60 INFO - [DefaultWebSocketHandler.textdoMessage.SENDGROUP] 1111 DEBUG - Encoding WebSocket Frame opCode=1 length=59 INFO - 【異步寫入數據】 InChatMessage{time=Mon Dec 24 10:03:02 CST 2018, type='sendGroup', value='', token='1111', groudId='2', online='null', onlineGroup=[2222, 3333], one='null'} 1111 DEBUG - Encoding WebSocket Frame opCode=1 length=22