今天我們要做的d" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 用Java構(gòu)建一個簡單的WebSocket聊天室

用Java構(gòu)建一個簡單的WebSocket聊天室

時間:2023-07-06 11:33:01 | 來源:網(wǎng)站運營

時間:2023-07-06 11:33:01 來源:網(wǎng)站運營

用Java構(gòu)建一個簡單的WebSocket聊天室:

前言

首先對于一個簡單的聊天室,大家應(yīng)該都有一定的概念了,這里我們省略用戶模塊的講解,而是單純的先說說聊天室的幾個功能:自我對話、好友交流、群聊、離線消息等。

今天我們要做的demo就能幫我們做到這一點啦?。?!

采用框架

我們整個Demo基本不需要大家花費太多時間,就可以實現(xiàn)以上的幾個功能。

首先,我們需要介紹一下我們今天打算采用的框架,InChat : 一個輕量級、高效率的支持多端(應(yīng)用與硬件Iot)的異步網(wǎng)絡(luò)應(yīng)用通訊框架,采用這個框架,我們基本上只需要兩三個類就可以實現(xiàn)我們今天需要的功能了。

需要了解SSM & SpringBoot 嗎?

InChat ,本身不依賴于任何的底層框架,所以大家只要會基本的Java語言就可以實現(xiàn)一套自己的WebSocket聊天室。

框架使用手冊

關(guān)于詳細的手冊說明,大家可以看看官網(wǎng)的介紹:InChatV1.1.0版本使用說明

開始Demo搭建

構(gòu)建一個空的Maven項目

我們不需要依賴其他的Maven包,只要本文提及的框架即可。

<dependency> <groupId>com.github.UncleCatMySelf</groupId> <artifactId>InChat</artifactId> <version>1.1.0-alpha</version></dependency>

對接兩個接口與實現(xiàn)

一個是框架提供給我們用戶進行數(shù)據(jù)保存與讀取的,通過這個接口的實現(xiàn),我們可以異步拿到每個聊天的通信數(shù)據(jù)。這里的InChatMessage是一個框架自定義的通信對象。

public class ToDataBaseServiceImpl implements InChatToDataBaseService{ @Override public Boolean writeMapToDB(InChatMessage message) { System.out.println(message.toString()); return true; }}還有一個接口是對登錄的校驗(這里我們審理用戶登錄與校驗?zāi)K,所以直接返回true即可),還有一個是返回群聊的數(shù)組信息。

public class verifyServiceImpl implements InChatVerifyService { @Override public boolean verifyToken(String token) { //登錄校驗 return true; } @Override public JSONArray getArrayByGroupId(String groupId) { //根據(jù)群聊id獲取對應(yīng)的群聊人員ID JSONArray jsonArray = JSONArray.parseArray("[/"1111/",/"2222/",/"3333/"]"); return jsonArray; }}我們可以再詳細的說下,獲取群聊信息,是通過一個groupId來獲取對應(yīng)的用戶Id數(shù)組,我們可以自己做一個數(shù)據(jù)查詢。

核心的框架啟動代碼

直接上代碼,然后我們再講解一下。

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() { //設(shè)定默認服務(wù)器發(fā)送值 Map<String,String> map = new HashMap<>(); map.put("server","服務(wù)器"); //獲取控制臺用戶想發(fā)送的用戶Token Scanner scanner = new Scanner(System.in); String token = scanner.nextLine(); //獲取用戶連接 Channel channel = (Channel) webSocketChannelService.getChannel(token); //調(diào)用接口發(fā)送 webSocketChannelService.sendFromServer(channel,map); } }).start(); }}好了,以上已經(jīng)基本完成了我們的聊天室Demo了,是不是很簡單?。?br>
首先,我們將實現(xiàn)的兩個類,配置到框架的配置工廠中,然后啟動框架即可,相關(guān)的類,都是框架提供的。下面的線程是一個框架的接口,以服務(wù)器第一人稱發(fā)送給針對用戶通知信息,輸入“1111”,Demo演示的用戶token值。

關(guān)于前端

InChat : 一個輕量級、高效率的支持多端(應(yīng)用與硬件Iot)的異步網(wǎng)絡(luò)應(yīng)用通訊框架,大家可以直接來這個項目下獲取前端頁面,或者直接訪問這個地址:https://github.com/UncleCatMySelf/InChat/blob/master/Front-End-Testing/chat.html

對于這個前端頁面,我們需要更改一下IP地址。

運行調(diào)試項目

接下來直接啟動后端項目,當我們看到以下的信息,則項目啟動成功。

INFO - 服務(wù)端啟動成功【192.168.1.121:8090】這里的IP需要更換以下讀者啟動后的IP地址。

接著直接用瀏覽器打開chat.html的頁面即可,關(guān)于js的方法,大家可以看看InChatV1.1.0版本使用說明。

運行效果如下:

INFO - 服務(wù)端啟動成功【192.168.1.121:8090】DEBUG - -Dio.netty.buffer.bytebuf.checkAccessible: trueDEBUG - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@68ad4247 INFO - [DefaultWebSocketHandler.channelActive]/192.168.1.121:17330鏈接成功DEBUG - -Dio.netty.recycler.maxCapacityPerThread: 4096DEBUG - -Dio.netty.recycler.maxSharedCapacityFactor: 2DEBUG - -Dio.netty.recycler.linkCapacity: 16DEBUG - -Dio.netty.recycler.ratio: 8DEBUG - [id: 0xabb0dbad, L:/192.168.1.121:8090 - R:/192.168.1.121:17330] WebSocket version V13 server handshakeDEBUG - WebSocket version 13 server handshake key: JYErdeATDgbPmgK0mZ+IlQ==, response: YK9ZiJehNP+IwtlkpoVkPt94yWY=DEBUG - Decoding WebSocket Frame opCode=1DEBUG - Decoding WebSocket Frame length=31 INFO - [DefaultWebSocketHandler.textdoMessage.LOGIN]DEBUG - Encoding WebSocket Frame opCode=1 length=33DEBUG - Decoding WebSocket Frame opCode=1DEBUG - Decoding WebSocket Frame length=43 INFO - [DefaultWebSocketHandler.textdoMessage.SENDME]1111DEBUG - Encoding WebSocket Frame opCode=1 length=28 INFO - 【異步寫入數(shù)據(jù)】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=1DEBUG - Decoding WebSocket Frame length=56 INFO - [DefaultWebSocketHandler.textdoMessage.SENDTO]1111DEBUG - Encoding WebSocket Frame opCode=1 length=41 INFO - 【異步寫入數(shù)據(jù)】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=1DEBUG - Decoding WebSocket Frame length=60 INFO - [DefaultWebSocketHandler.textdoMessage.SENDGROUP]1111DEBUG - Encoding WebSocket Frame opCode=1 length=59 INFO - 【異步寫入數(shù)據(jù)】InChatMessage{time=Mon Dec 24 10:03:02 CST 2018, type='sendGroup', value='', token='1111', groudId='2', online='null', onlineGroup=[2222, 3333], one='null'}1111DEBUG - Encoding WebSocket Frame opCode=1 length=22






作者:UncleCatMySelf
鏈接:http://www.imooc.com/article/269407
來源:慕課網(wǎng)
本文首次發(fā)布于慕課網(wǎng) ,轉(zhuǎn)載請注明出處,謝謝合作


推薦閱讀:

打字速度對編程的影響大嗎?

最讓程序員自豪的事情是什么?

接手別人的代碼,死的心有嗎?

普通的程序員和大神級的程序員有什么區(qū)別?

程序員到底有多累、多辛苦?

有哪些視頻堪稱有毒?

暴露真實IP真的沒關(guān)系嗎?

有哪些程序員特有的習慣?

月薪3萬的程序員都避開了哪些坑?

和程序猿談戀愛是一種怎樣的體驗?

關(guān)鍵詞:簡單

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉