stomp java客户端_Stomp-Spring服务器端的Web套接字Java客户端
生活随笔
收集整理的這篇文章主要介紹了
stomp java客户端_Stomp-Spring服务器端的Web套接字Java客户端
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
stomp java客戶端
問題:
為了分析問題,我不得不編寫一個簡單的Java Web套接字客戶端站點代碼,并使用基于stomp的Web套接字代理連接到服務器端基于Spring的應用程序。
解決方案:
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.rnd</groupId><artifactId>SockWebsocketClient</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-messaging</artifactId><version>5.0.7.RELEASE</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.5</version></dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-websocket</artifactId><version>9.0.8</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.0.2.RELEASE</version><type>pom</type></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-websocket</artifactId><version>5.0.7.RELEASE</version></dependency></dependencies> </project>Sock JS客戶端
它是主要的班級,是做基礎工作的簡單班級。 由于當今大多數Web套接字都打算使用SSL,因此嘗試通過創建虛擬TrustManager來傳遞信任管理器問題。
此代碼的輸入是您要訂閱的主題字符串。
另外,不要在運行前更改代碼中的<URL>字符串,指向您的Web套接字url。
package com.client;import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.converter.MessageConverter; import org.springframework.messaging.converter.SimpleMessageConverter; import org.springframework.messaging.converter.StringMessageConverter; import org.springframework.messaging.simp.stomp.StompHeaders; import org.springframework.web.socket.WebSocketHttpHeaders; import org.springframework.web.socket.client.standard.StandardWebSocketClient; import org.springframework.web.socket.messaging.WebSocketStompClient; import org.springframework.web.socket.sockjs.client.Transport; import org.springframework.web.socket.sockjs.client.WebSocketTransport; import org.springframework.web.socket.sockjs.frame.Jackson2SockJsMessageCodec;import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.net.URI; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;public class SockJsClient {public static void main(String[] args) {try {StandardWebSocketClient simpleWebSocketClient = new StandardWebSocketClient();TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() {return null;}public void checkClientTrusted(X509Certificate[] certs, String authType) {}public void checkServerTrusted(X509Certificate[] certs, String authType) {}}};SSLContext sc = SSLContext.getInstance("SSL");sc.init(null, trustAllCerts, new java.security.SecureRandom());HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());Map<String, Object> properties = new HashMap<>();properties.put("org.apache.tomcat.websocket.SSL_CONTEXT", sc);simpleWebSocketClient.setUserProperties(properties);List<Transport> transports = new ArrayList();transports.add(new WebSocketTransport(simpleWebSocketClient));org.springframework.web.socket.sockjs.client.SockJsClient sockJsClient = new org.springframework.web.socket.sockjs.client.SockJsClient(transports);sockJsClient.setMessageCodec(new Jackson2SockJsMessageCodec());WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);stompClient.setMessageConverter(new MessageConverter() {@Overridepublic Object fromMessage(Message<?> message, Class<?> aClass) {return new String((byte[])message.getPayload());}@Overridepublic Message<?> toMessage(Object o, MessageHeaders messageHeaders) {return null;}});// url : pointing to websocket as sockJs first tries to get info by sending a HTTP request// and then sends an upgrade request to ws or wss. So your url should be some thing like htttp://URI stompUrlEndpoint = new URI("<url>");WebSocketHttpHeaders handshakeHeaders = new WebSocketHttpHeaders();StompHeaders connectHeaders = new StompHeaders();/*Can set connection header like login , passcode in connectHeaders */stompClient.connect(stompUrlEndpoint.toString(), handshakeHeaders, connectHeaders, new SessionHandler(args[0]), new Object[0]);Thread.sleep(30000);stompClient.stop();} catch (Exception e) {e.printStackTrace();}} }會話處理程序
每個套接字連接都需要一個會話處理程序,這里是一個用于處理連接設置和傳入消息的會話處理程序。
package com.client;import org.springframework.messaging.simp.stomp.StompCommand; import org.springframework.messaging.simp.stomp.StompFrameHandler; import org.springframework.messaging.simp.stomp.StompHeaders; import org.springframework.messaging.simp.stomp.StompSession; import org.springframework.messaging.simp.stomp.StompSessionHandlerAdapter;import java.lang.reflect.Type;public class SessionHandler extends StompSessionHandlerAdapter {private final String topicName ;public SessionHandler(String topicName) {this.topicName = topicName;}@Overridepublic void afterConnected(StompSession session, StompHeaders connectedHeaders) {this.subscribeTo(session);}@Overridepublic void handleException(StompSession session,StompCommand command,StompHeaders headers,byte[] payload,Throwable exception ) {exception.printStackTrace();}public void handleFrame(StompHeaders headers, Object payload) {System.out.println(payload.toString());}@Overridepublic void handleTransportError(StompSession session, Throwable exception) {exception.printStackTrace();}private void subscribeTo(StompSession session) {StompHeaders headers = new StompHeaders();headers.add("id","websocket-session-standalone-0");headers.add("destination",topicName);session.subscribe(headers, new StompFrameHandler() {@Overridepublic Type getPayloadType(StompHeaders stompHeaders) {return String.class;}@Overridepublic void handleFrame(StompHeaders stompHeaders, Object o) {System.out.println( " Message is " +o.toString());}});} }翻譯自: https://www.javacodegeeks.com/2019/08/web-socket-java-client-stomp-spring-server-side.html
stomp java客戶端
總結
以上是生活随笔為你收集整理的stomp java客户端_Stomp-Spring服务器端的Web套接字Java客户端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯企业邮箱怎么开通注册(腾讯企业邮箱怎
- 下一篇: java美元兑换,(Java实现) 美元