Java中Spring WebSocket详解

网友投稿 671 2023-03-04


Java中Spring WebSocket详解

首先 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(WebSocketSessioZkSVfDFBHZn 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://localhost: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

前端的测试页面 main\resources\static\index.html

ws://127.0.0.1:1213/

连接

断开

发送消息

到此就可以使用 WebSocket 进行前后端的通信了,如果大家还有不明白的或者有更好的方法,可以在下方的留言区讨论。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java语言描述MD5加密工具类实例代码
下一篇:SSM 整合的配合文件(分享)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~