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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springboot之websocket

發布時間:2023/12/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot之websocket 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  一、WebSocket協議是基于TCP的一種新的網絡協議。它實現了瀏覽器與服務器全雙工(full-duplex)通信——允許服務器主動發送信息給客戶端。

  二、長久以來, 創建實現客戶端和用戶端之間雙工通訊的web app都會造成HTTP輪詢的濫用: 客戶端向主機不斷發送不同的HTTP呼叫來進行詢問。

這會導致一系列的問題: 1.服務器被迫為每個客戶端使用許多不同的底層TCP連接:一個用于向客戶端發送信息,其它用于接收每個傳入消息。 2.有些協議有很高的開銷,每一個客戶端和服務器之間都有HTTP頭。 3.客戶端腳本被迫維護從傳出連接到傳入連接的映射來追蹤回復。 一個更簡單的解決方案是使用單個TCP連接雙向通信。 這就是WebSocket協議所提供的功能。 結合WebSocket API ,WebSocket協議提供了一個用來替代HTTP輪詢實現網頁到遠程主機的雙向通信的方法。 它的最大特點就是,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發送信息,是真正的雙向平等對話,屬于服務器推送技術的一種。 三、特點:  

  (1)建立在 TCP 協議之上,服務器端的實現比較容易。

  (2)與 HTTP 協議有著良好的兼容性。默認端口也是80和443,并且握手階段采用 HTTP 協議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務器。

  (3)數據格式比較輕量,性能開銷小,通信高效。

  (4)可以發送文本,也可以發送二進制數據。

  (5)沒有同源限制,客戶端可以與任意服務器通信。

  (6)協議標識符是ws(如果加密,則為wss),服務器網址就是 URL。

  四、實例:

?

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.pinnet</groupId><artifactId>springboot-websocket</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>1.5.9.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>1.5.9.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>1.5.9.RELEASE</version></dependency></dependencies> </project>

  2)websocket配置

package com.pinnet.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter;@Configuration public class WebSocketConfig {//加入配置,目的使用注解連接websocket @Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();} }

  3)websocket的連接處理服務

package com.pinnet.controller;import org.springframework.stereotype.Component;import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList;@Component //websocket的連接名稱 @ServerEndpoint(value = "/webSocket") public class WebSocketServer {private Session session;private List<WebSocketServer> webSocketServers = new CopyOnWriteArrayList<WebSocketServer>();//打開連接時的操作 @OnOpenpublic void onOpen(Session session) {this.session = session;webSocketServers.add(this);}//關閉連接時的操作 @OnClosepublic void onClose() {webSocketServers.remove(this);}//接手消息時的操作 @OnMessagepublic void onMessage(String message) {for (WebSocketServer webSocketServer: webSocketServers) {try {sendMessage(webSocketServer, message);} catch (Exception e) {e.printStackTrace();}}}//發送消息public void sendMessage(WebSocketServer webSocketServer,String message) throws IOException {webSocketServer.session.getBasicRemote().sendText(message);} }

  4)順便謝了一個測試的js,可以直接在瀏覽器console里面執行測試

var websocket = null;if ('WebSocket' in window) {websocket = new WebSocket('ws://localhost/webSocket');} else {alert('該瀏覽器不支持websocket');}websocket.onopen = function (event) {console.log('websocket建立連接');websocket.send("websocket發送消息"); }websocket.onclose = function (event) {console.log('websocket關閉連接');}websocket.onmessage = function (event) {console.log('websocket收到消息:' + event.data);}

  五、springboot的簡單用法就是這樣的,當然實際的用法,需要進行封裝,具體的處理以及使用都要,一定的框架支持。

  六、源碼下載:https://pan.baidu.com/s/1cHF_UIFb2cMTcmDM4UlzlA

?

?

?

?

總結

以上是生活随笔為你收集整理的springboot之websocket的全部內容,希望文章能夠幫你解決所遇到的問題。

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