基于Spring boot的非常简单的WebSocket客户端与服务端通信,真心不想写Socket,用Netty写着太累,真心没多少时候需要那么好的性能。
?
在握手时,试着传个参数,发现没问题,整体用起来,Spring的东西很靠谱。
?
服务端:
?
import com.google.common.base.Strings; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.handler.TextWebSocketHandler; import org.springframework.web.socket.server.HandshakeInterceptor; import java.util.Map; @SpringBootApplication public class MyWebSocketServer { public static void main(String[] args) { SpringApplication.run(MyWebSocketServer.class, args); } @Component @EnableWebSocket private static class Config implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new MyHandler(), "/ws").setAllowedOrigins("*") .addInterceptors(new MyHandshakeInterceptor()); } } private static class MyHandler extends TextWebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println(session.getAttributes().get("collector")); super.afterConnectionEstablished(session); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { System.out.println(message.getPayload()); session.sendMessage(new TextMessage("reply.................." + message.getPayload())); super.handleTextMessage(session, message); } } private static class MyHandshakeInterceptor implements HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { String collector = ((ServletServerHttpRequest) request).getServletRequest().getParameter("collector"); if (Strings.isNullOrEmpty(collector)) { return false; } else { attributes.put("collector", collector); return true; } } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { } } }
?
客户端:
?
import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.client.WebSocketConnectionManager; import org.springframework.web.socket.client.standard.StandardWebSocketClient; import org.springframework.web.socket.handler.TextWebSocketHandler; import java.io.IOException; public class MyWebSocketClient { private static final String WS_URI = "ws://localhost:8080/ws?collector=123"; public static void main(String[] args) throws IOException, InterruptedException { StandardWebSocketClient client = new StandardWebSocketClient(); WebSocketConnectionManager manager = new WebSocketConnectionManager(client, new MyHandler(), WS_URI); manager.start(); Thread.sleep(10000); } private static class MyHandler extends TextWebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println("connected..........."); session.sendMessage(new TextMessage("hello, web socket")); super.afterConnectionEstablished(session); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { System.out.println("receive: " + message.getPayload()); super.handleTextMessage(session, message); } } }
?
Spring Web Socket 客户端 服务端实现 握手时传递参数
原文:http://lippeng.iteye.com/blog/2299509