![【移動應(yīng)用開發(fā)技術(shù)】SpringBoot怎么使用WebSocket實(shí)現(xiàn)群發(fā)消息_第1頁](http://file4.renrendoc.com/view/a0e519f9be12bdf9cb65f43b197405da/a0e519f9be12bdf9cb65f43b197405da1.gif)
![【移動應(yīng)用開發(fā)技術(shù)】SpringBoot怎么使用WebSocket實(shí)現(xiàn)群發(fā)消息_第2頁](http://file4.renrendoc.com/view/a0e519f9be12bdf9cb65f43b197405da/a0e519f9be12bdf9cb65f43b197405da2.gif)
![【移動應(yīng)用開發(fā)技術(shù)】SpringBoot怎么使用WebSocket實(shí)現(xiàn)群發(fā)消息_第3頁](http://file4.renrendoc.com/view/a0e519f9be12bdf9cb65f43b197405da/a0e519f9be12bdf9cb65f43b197405da3.gif)
![【移動應(yīng)用開發(fā)技術(shù)】SpringBoot怎么使用WebSocket實(shí)現(xiàn)群發(fā)消息_第4頁](http://file4.renrendoc.com/view/a0e519f9be12bdf9cb65f43b197405da/a0e519f9be12bdf9cb65f43b197405da4.gif)
![【移動應(yīng)用開發(fā)技術(shù)】SpringBoot怎么使用WebSocket實(shí)現(xiàn)群發(fā)消息_第5頁](http://file4.renrendoc.com/view/a0e519f9be12bdf9cb65f43b197405da/a0e519f9be12bdf9cb65f43b197405da5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】SpringBoot怎么使用WebSocket實(shí)現(xiàn)群發(fā)消息
這篇文章主要介紹了SpringBoot怎么使用WebSocket實(shí)現(xiàn)群發(fā)消息的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇SpringBoot怎么使用WebSocket實(shí)現(xiàn)群發(fā)消息文章都會有所收獲,下面我們一起來看看吧。WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,已被W3C定為標(biāo)準(zhǔn)。使用WebSocket可以使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單。在WebSocket協(xié)議中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就可以直接創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。特點(diǎn)WebSocket使用時(shí)需要先創(chuàng)建連接,這使得Websocket成為一種有狀態(tài)的協(xié)議,在之后的通信過程中可以省略部分狀態(tài)信息(例如身份認(rèn)證等)。WebSocket連接在端口80(ws)或者443(wss)上創(chuàng)建,與HTTP使用的端口相同,這樣,基本上所有的防火墻都不會阻止WebSocket連接。WebSocket使用HTTP協(xié)議進(jìn)行握手,因此它可以自然而然地集成到網(wǎng)絡(luò)瀏覽器和HTTP服務(wù)器中,而不需要額外的成本。心跳消息(ping和pong)將被反復(fù)的發(fā)送,進(jìn)而保持WebSocket連接一直處于活躍狀態(tài)。使用該協(xié)議,當(dāng)消息啟動或者到達(dá)的時(shí)候,服務(wù)端和客戶端都可以知道。WebSocket連接關(guān)閉時(shí)將發(fā)送一個(gè)特殊的關(guān)閉消息。WebSocket支持跨域,可以避免Ajax的限制。HTTP規(guī)范要求瀏覽器將并發(fā)連接數(shù)限制為每個(gè)主機(jī)名兩個(gè)連接,但是當(dāng)我們使用Websocket的時(shí)候,當(dāng)握手完成之后,該限制就不存在了,因?yàn)榇藭r(shí)的連接已經(jīng)不再是HTTP連接了。WebSocket協(xié)議支持?jǐn)U展,用戶可以擴(kuò)展協(xié)議,實(shí)現(xiàn)部分自定義的子協(xié)議。WebSocket擁有更好的二進(jìn)制支持以及更好的壓縮效果。一、添加依賴<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>二、配置WebSocketSpring框架提供了基于WebSocket的STOMP支持,STOMP是一個(gè)簡單的可互操作的協(xié)議,通常被用于通過中間服務(wù)器在客戶端之間進(jìn)行異步消息傳遞。@Configuration
@EnableWebSocketMessageBroker
public
class
WebSocketConfig
implements
WebSocketMessageBrokerConfigurer
{
@Override
public
void
configureMessageBroker(MessageBrokerRegistry
config)
{
//
設(shè)置消息代理的前綴,如果消息的前綴為"/topic",就會將消息轉(zhuǎn)發(fā)給消息代理(broker)
//
再由消息代理廣播給當(dāng)前連接的客戶端
config.enableSimpleBroker("/topic");
//
下面方法可以配置一個(gè)或多個(gè)前綴,通過這些前綴過濾出需要被注解方法處理的消息。
//
例如這里表示前綴為"/app"的destination可以通過@MessageMapping注解的方法處理
//
而其他
destination(例如"/topic""/queue")將被直接交給
broker
處理
config.setApplicationDestinationPrefixes("/app");
}
@Override
public
void
registerStompEndpoints(StompEndpointRegistry
registry)
{
//
定義一個(gè)前綴為"/chart"的endpoint,并開啟
sockjs
支持。
//
sockjs
可以解決瀏覽器對WebSocket的兼容性問題,客戶端將通過這里配置的URL建立WebSocket連接
registry.addEndpoint("/chat").withSockJS();
}
}三、服務(wù)端代碼根據(jù)上面WebSocketConfig的配置,@MessageMapping("/hello")注解的方法將用來接收“/app/hello”路徑發(fā)送來的消息,在注解方法中對消息進(jìn)行處理后,再將消息轉(zhuǎn)發(fā)到@SendTo定義的路徑上。而@SendTo路徑是一個(gè)前綴為“/topic”的路徑,因此該消息被交給消息代理broker,再由broker進(jìn)行廣播。@Controller
public
class
DemoController
{
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public
Message
greeting(Message
message)
throws
Exception
{
return
message;
}
}@Data
public
class
Message
{
private
String
name;
private
String
content;
}四、前端代碼
在resources/static目錄下創(chuàng)建chat.html頁面作為聊天頁面。<!DOCTYPE
html>
<html
lang="en">
<head>
<meta
charset="UTF-8">
<title>群聊</title>
<script
src="/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script
src="/ajax/libs/sockjs-client/1.1.2/sockjs.min.js"></script>
<script
src="/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
<script>
var
stompClient
=
null;
//
根據(jù)是否已連接設(shè)置頁面元素狀態(tài)
function
setConnected(connected)
{
$("#connect").prop("disabled",
connected);
$("#disconnect").prop("disabled",
!connected);
if
(connected)
{
$("#conversation").show();
$("#chat").show();
}
else
{
$("#conversation").hide();
$("#chat").hide();
}
$("#greetings").html("");
}
//
建立一個(gè)WebSocket連接
function
connect()
{
//
用戶名不能為空
if
(!$("#name").val())
{
return;
}
//
首先使用
SockJS
建立連接
var
socket
=
new
SockJS('/chat');
//
然后創(chuàng)建一個(gè)STOMP實(shí)例發(fā)起連接請求
stompClient
=
Stomp.over(socket);
//
連接成功回調(diào)
stompClient.connect({},
function
(frame)
{
//
進(jìn)行頁面設(shè)置
setConnected(true);
//
訂閱服務(wù)端發(fā)送回來的消息
stompClient.subscribe('/topic/greetings',
function
(greeting)
{
//
將服務(wù)端發(fā)送回來的消息展示出來
showGreeting(JSON.parse(greeting.body));
});
});
}
//
斷開WebSocket連接
function
disconnect()
{
if
(stompClient
!==
null)
{
stompClient.disconnect();
}
setConnected(false);
}
//
發(fā)送消息
function
sendName()
{
stompClient.send("/app/hello",
{},
JSON.stringify({'name':
$("#name").val(),'content':$("#content").val()}));
}
//
將服務(wù)端發(fā)送回來的消息展示出來
function
showGreeting(message)
{
$("#greetings")
.append("<div>"
+
+":"+message.content
+
"</div>");
}
//
頁面加載后進(jìn)行初始化動作
$(function
()
{
$(
"#connect"
).click(function()
{
connect();
});
$(
"#disconnect"
).click(function()
{
disconnect();
});
$(
"#send"
).click(function()
{
sendName();
});
});
</script>
</head>
<body>
<div>
<label
for="name">請輸入用戶名:</label>
<input
type="text"
id="name"
placeholder="用戶名">
</div>
<div>
<button
id="connect"
type="button">連接</button>
<button
id="disconnect"
type="button"
disabled="disabled">斷開連接</button>
</div>
<div
id="chat"
>
<div>
<label
for="name">請輸入聊天內(nèi)容:</label>
<input
type="text"
id="content"
placeholder="聊天內(nèi)容">
</div>
<button
id="send"
type="button">發(fā)送</button>
<div
id="greetings">
<div
id="conversation"
>群聊進(jìn)行中...</div>
</div>
</div>
</body>
</html>SockJS是一個(gè)瀏覽器JavaScript庫,提供類似于WebSocket的對象。SockJS為您提供了一個(gè)一致
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024民間借貸合同范本(28篇)
- 2025年農(nóng)村子女撫養(yǎng)費(fèi)用分擔(dān)協(xié)議
- 2025年供電企業(yè)與用戶用電合作協(xié)議
- 2025年共同策劃健身房合作合同書
- 企業(yè)勞動合同協(xié)議2025年
- 2025年企業(yè)員工勞動合同補(bǔ)充協(xié)議范本
- 2025年鋁合金預(yù)拉伸厚板和蒙皮鋁合金板項(xiàng)目立項(xiàng)申請報(bào)告模范
- 2025年高性能陶瓷復(fù)合材料項(xiàng)目立項(xiàng)申請報(bào)告模板
- 2025年企業(yè)變更代理協(xié)議
- 2025年漲緊輪項(xiàng)目提案報(bào)告模板
- 中國人口研究專題報(bào)告-中國2025-2100年人口預(yù)測與政策建議-西南財(cái)經(jīng)大學(xué)x清華大學(xué)-202501
- 建筑工程安全與管理
- 幼兒園開學(xué)教師安全知識培訓(xùn)
- 2024年山東水利職業(yè)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 遼寧省名校聯(lián)盟2025年高三1月份聯(lián)合考試 語文試卷(含答案詳解)
- 工廠廠區(qū)道路拆除實(shí)施方案
- 25版六年級寒假特色作業(yè)
- 浙江省杭州市9+1高中聯(lián)盟2025屆高三一診考試英語試卷含解析
- 2025教科版一年級科學(xué)下冊教學(xué)計(jì)劃
- 中學(xué)生勞動安全課件
- 旅游行業(yè)智慧旅游營銷策略與方案
評論
0/150
提交評論