栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中Spring WebSocket详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 {
 
 @Override
 protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
  session.sendMessage(new TextMessage(message.asBytes()));
 }

 
 @Override
 protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
  session.sendMessage(new BinaryMessage(message.getPayload()));
 }

 
 @Override
 protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {
	
 }
 
 @Override
 public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
 }
 
 @Override
 public void afterConnectionClosed(WebSocketSession session, CloseStatus status) 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

前端的测试页面 mainresourcesstaticindex.html



 
  
  
  
  Platform Gateway
  
  
  
  
  
  
  
   #message{
    height: 600px;
    overflow-y:auto;
   }
  
 
 
  
   WebSocket Test Page
   
ws://127.0.0.1:1213/

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/142489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号