Heim >Web-Frontend >H5-Tutorial >Detaillierte Einführung in Spring WebSocket
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.
Ü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
<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(); } }
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) { } }abzurufen, um Nachrichten
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; } }ReconnectingWebSocket.js wird hier verwendet, um eine Erweiterung zum browsereigenen Websocket hinzuzufügen, z B. Wiederverbindung, Zeitüberschreitung der Verbindung, Intervall für fehlgeschlagene Wiederverbindung, maximale Anzahl von Verbindungsversuchen usw.
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关闭"); }Projekthomepage:ReconnectingWebSocket
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!