首先 pom.xml
沅陵ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!
org.springframework.boot spring-boot-starter-parent 1.5.8.RELEASE org.apache.commons commons-io javax.websocket javax.websocket-api 1.0 provided org.springframework spring-websocket org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-undertow
接收消息后的處理類(lèi) GameHandler :
import java.net.URI; import org.springframework.web.socket.BinaryMessage; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.PongMessage; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.AbstractWebSocketHandler; public class GameHandler extends AbstractWebSocketHandler { /** * 處理字符串類(lèi)的信息 * * @param session * @param message * @throws Exception */ @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { session.sendMessage(new TextMessage(message.asBytes())); } /** * 處理二進(jìn)制類(lèi)的信息 * * @param session * @param message * @throws Exception */ @Override protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception { session.sendMessage(new BinaryMessage(message.getPayload())); } /** * ping-pong * * @param session * @param message * @throws Exception */ @Override protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception { } /** * 傳出錯(cuò)誤的處理 * * @param session * @param exception * @throws Exception */ @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { } /** * 連接關(guān)閉的處理 * * @param session * @param status * @throws Exception */ @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { } /** * 連接建立后的處理 * * @param session * @throws Exception */ @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { } }
握手信息攔截器 WebSocketHandshakeInterceptor :
import java.util.Map; import javax.servlet.http.Cookie; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.HandshakeInterceptor; public class WebSocketHandshakeInterceptor implements HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse shr1, WebSocketHandler wsh, Mapattributes) throws Exception { // 此處可以做一些權(quán)限認(rèn)證的事情或者其他 return true; } @Override public void afterHandshake(ServerHttpRequest shr, ServerHttpResponse shr1, WebSocketHandler wsh, Exception excptn) { } }
使用WebSocket的配置類(lèi) WebSocketConfig :
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @Configuration @EnableWebSocket public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { // 允許連接的域,只能以http或https開(kāi)頭 String[] allowsOrigins = {"http://127.0.0.1:1213", "http://localhost:1213"}; registry.addHandler(gameHandler(),"/game").addInterceptors(handshakeInterceptor()).setAllowedOrigins(allowsOrigins); } @Bean public GameHandler gameHandler() { return new GameHandler(); } @Bean public WebSocketHandshakeInterceptor handshakeInterceptor() { return new WebSocketHandshakeInterceptor(); } }
啟動(dòng)類(lèi) Launcher :
@SpringBootApplication public class Launcher { public static void main(String[] params) { SpringApplication.run(Launcher.class, params); } }
配置文件 main/resources/application.properties:
server.port=1213 server.session-timeout=1800 server.undertow.io-threads=4 server.undertow.worker-threads=20 server.undertow.buffer-size=1024 server.undertow.buffers-per-region=1024 server.undertow.direct-buffers=true
前端的測(cè)試頁(yè)面 main\resources\static\index.html
Platform Gateway WebSocket Test Page
ws://127.0.0.1:1213/
到此就可以使用 WebSocket 進(jìn)行前后端的通信了,如果大家還有不明白的或者有更好的方法,可以在下方的留言區(qū)討論。