日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java控制层创建websocket_用Java构建一个简单的WebSocket聊天室

發布時間:2025/3/12 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java控制层创建websocket_用Java构建一个简单的WebSocket聊天室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

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

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

采用框架

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

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

需要了解SSM & SpringBoot 嗎?

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

框架使用手冊

關于詳細的手冊說明,大家可以看看官網的介紹:InChatV1.1.0版本使用說明

開始Demo搭建

構建一個空的Maven項目

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

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值。

關于前端

對于這個前端頁面,我們需要更改一下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

總結

以上是生活随笔為你收集整理的java控制层创建websocket_用Java构建一个简单的WebSocket聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。