最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java中Spring WebSocket详解
时间:2022-06-29 01:00:46 编辑:袖梨 来源:一聚教程网
首先 pom.xml
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
接收消息后的处理类 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 {
/**
* 处理字符串类的信息
*
* @param session
* @param message
* @throws Exception
*/
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
session.sendMessage(new TextMessage(message.asBytes()));
}
/**
* 处理二进制类的信息
*
* @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 {
}
/**
* 传出错误的处理
*
* @param session
* @param exception
* @throws Exception
*/
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
}
/**
* 连接关闭的处理
*
* @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, Map attributes) throws Exception {
// 此处可以做一些权限认证的事情或者其他
return true;
}
@Override
public void afterHandshake(ServerHttpRequest shr, ServerHttpResponse shr1, WebSocketHandler wsh, Exception excptn) {
}
}
使用WebSocket的配置类 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开头
String[] allowsOrigins = {"http://127.**0*.0.1:1213", "http://loc*al**host:1213"};
registry.addHandler(gameHandler(),"/game").addInterceptors(handshakeInterceptor()).setAllowedOrigins(allowsOrigins);
}
@Bean
public GameHandler gameHandler() {
return new GameHandler();
}
@Bean
public WebSocketHandshakeInterceptor handshakeInterceptor() {
return new WebSocketHandshakeInterceptor();
}
}
启动类 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
前端的测试页面 mainresourcesstaticindex.html
css.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet">WebSocket Test Page
ws://127.0.0.1:1213/
相关文章
- 火山的女儿肯尼斯怎么玩 10-26
- 斗罗大陆猎魂世界玉元星强度如何 10-26
- 口袋斗罗大陆药材精华如何获取 10-26
- 大周列国志白帝少昊姬玄嚣怎么玩 10-26
- 崩坏因缘精灵刃有哪些玩法技巧 10-26
- 王者荣耀世界奇境副本如何挑战 10-26