Detaillierte Einführung in Spring WebSocket
Jul 03, 2017 pm 03:18 PMSzenario
Websocket ist eine der neuen Funktionen von Html5. Der Zweck besteht darin, eine Vollduplex-Kommunikationsmethode zwischen dem Browser und dem Server einzurichten, um den durch http-Anfragen verursachten übermäßigen Ressourcenverbrauch zu beheben -Antwort. Gleichzeitig bietet es neue Implementierungsmethoden für spezielle Szenarioanwendungen wie Chat, Aktienhandel, Spiele und andere Branchen, die eine hohe Echtzeitleistung erfordern.
Hintergrund
Über http im Browser kann nur eine einseitige Kommunikation erreicht werden, die jedoch weniger effizient ist Es ist eine gute Unterstützung für Socket und XMLSocket erforderlich. Durch Flex-Ajax-Bridge können diese beiden Funktionen in Javascript verwendet werden Sobald es im Browser implementiert ist, ersetzt es die beiden oben genannten Technologien und wird häufig verwendet. Angesichts dieser Situation definiert HTML5 das WebSocket-Protokoll, mit dem Serverressourcen und Bandbreite besser eingespart und eine Echtzeitkommunikation erreicht werden können. Derzeit unterstützen alle gängigen Mainstream-Browser den WebSocket
1. POM-Abhängigkeit
POM-Abhängigkeit, Spring4.1.4.RELEASE, Spring Please Fügen Sie Kernabhängigkeiten selbst hinzu. Im Folgenden finden Sie WebSocket-bezogene Jars
2. WebSocket-Eingang<dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>4.1.4.RELEASE</version> </dependency>
@Configuration @EnableWebMvc @EnableWebSocket public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { //允许连接的域,只能以http或https开头 String[] allowsOrigins = {"http://www.xxx.com"}; //WebIM WebSocket通道 registry.addHandler(chatWebSocketHandler(),"/ webSocketIMServer").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()); registry.addHandler(chatWebSocketHandler(), "/sockjs/w ebSocketIMServer").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS(); } @Bean public ChatWebSocketHandler chatWebSocketHandler() { return new ChatWebSocketHandler(); } @Bean public WebSocketHandshakeInterceptor myInterceptor(){ return new WebSocketHandshakeInterceptor(); } }
- Implementieren Sie die WebSocketConfigurer-Schnittstelle und überschreiben Sie die Methode registerWebSocketHandlers. Dies ist eine zentrale Implementierungsmethode, die Websocket-Eingänge, erlaubte Zugriffsdomänen, registrierte Handler, SockJs-Unterstützung und Interceptors konfiguriert.
- registry.addHandler-Registrierungs- und Routing-Funktion: Wenn der Client eine Websocket-Verbindung initiiert, wird /path zur Verarbeitung an den entsprechenden Handler übergeben, ohne dass eine spezifische Geschäftslogik implementiert werden muss, was verständlich ist als Sammel- und Aufgabenverteilungszentrum.
- setAllowedOrigins(String[] domains) ermöglicht dem angegebenen Domänennamen oder der angegebenen IP (einschließlich Portnummer), eine lange Verbindung herzustellen. Wenn Sie nur den Zugriff auf Ihren eigenen Domänennamen zulassen, ist dies möglich Stellen Sie es einfach hier ein. Bei Verwendung des „*“-Zeichens ohne zeitliche Begrenzung muss bei Angabe eines Domainnamens dieser mit http oder https beginnen.
- addInterceptors dient, wie der Name schon sagt, zum Hinzufügen von Interceptoren zum Handler. Wir können unseren eigenen Logikcode vor und nach dem Aufruf des Handlers hinzufügen.
- Spring Websocket unterstützt auch das STOMP-Protokoll, ich werde es das nächste Mal teilen.
- 3. Interceptor-Implementierung
public class WebSocketHandshakeInterceptor implements HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object > attributes) throws Exception { if (request instanceof ServletServerHttpRequest) { attributes.put("username",userName); } return true; } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { } }
basierend auf Benutzerinformationen im Handler zu senden. 4. Handler-Verarbeitungsklasse
5. Client-Verbindungpublic class ChatWebSocketHandler extends TextWebSocketHandler{ private final static List<WebSocketSession> sessions = Collections.synchronizedList(new ArrayList<WebSocketSession>()); //接收文本消息,并发送出去 @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { chatTextMessageHandler(message.getPayload()); super.handleTextMessage(session, message); } //连接建立后处理 @SuppressWarnings("unchecked") @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { logger.debug("connect to the websocket chat success......"); sessions.add(session); //处理离线消息 } //抛出异常时处理 @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { if(session.isOpen()){ session.close(); } logger.debug("websocket chat connection closed......"); sessions.remove(session); } //连接关闭后处理 @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { logger.debug("websocket chat connection closed......"); sessions.remove(session); } @Override public boolean supportsPartialMessages() { return false; } }
var host = window.location.host; var websocket; if ('WebSocket' in window) { websocket = new ReconnectingWebSocket("ws://" + host + "/webSocketIMServer", null, {debug:true, maxReconnectAttempts:4}); } else if ('MozWebSocket' in window) { websocket = new MozWebSocket("ws://" + host + "/webSocketIMServer"); } else { websocket = new SockJS("http://" + host + "/sockjs/webSocketIMServer"); } websocket.onopen = function(evnt) { console.log("websocket连接上"); }; websocket.onmessage = function(evnt) { messageHandler(evnt.data); }; websocket.onerror = function(evnt) { console.log("websocket错误"); }; websocket.onclose = function(evnt) { console.log("websocket关闭"); }
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Spring WebSocket. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen?

Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft

Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen

So legen Sie die Transaktionsisolationsstufe im Frühjahr fest

Anwendung des JUnit-Unit-Test-Frameworks in Spring-Projekten

So aktivieren Sie den administrativen Zugriff über die Cockpit-Web-Benutzeroberfläche

Ist PHP Front-End oder Back-End in der Webentwicklung?
