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客户端相关推荐
- Stomp-Spring服务器端的Web套接字Java客户端
问题: 为了分析问题,我不得不编写一个简单的Java Web套接字客户端站点代码,并使用基于stomp的Web套接字代理连接到服务器端基于Spring的应用程序. 解决方案: pom.xml < ...
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...
- Java套接字程序_java – 通过Web套接字进行应用程序到应用程序的通信
我通过Web套接字(没有浏览器工作)获得应用程序到应用程序的通信有些麻烦.由于这似乎不是最常用的网络套接字应用程序,我想知道是否有人有这方面的经验. 为什么我要使用网络套接字? 由于防火墙问题,我需要 ...
- Java网络编程之UDP和TCP套接字
文章目录 一. 网络编程概述 二. UDP网络编程 1. UDP套接字 2. UDP客户端回显服务器程序 2.1 UDP回显服务器 2.2 UDP客户端 2.3 UDP实现查词典的服务器 三. TCP ...
- java网络封包_java网络编程(套接字)
套接字是java提供一套进行网络通信的API---TCP/UDP: ISO七层模型 物理层 .数据链路层 .传输层-IP. 网络层-UDP/TCP .会话层 . 表示层. 应用层---HTTP FTP ...
- c 服务器和android客户端,通过TCP与c + +(套接字服务器)conect android(套接字客户端)...
我有一个实现在大学项目中做,我不知道如何avchive它!我的问题就像标题所说的那样,通过套接字将C++与android连接起来.通过TCP与c + +(套接字服务器)conect android(套 ...
- Dart的套接字与web套接字
套接字 首先在项目中建三个dart文件,如下图 main.dart中的代码如下 import 'dart:io'; import 'dart:convert';main(List<String& ...
- 服务器java 客户端c_Java客户端和C ++服务器通过TCP套接字发送和接收
我有一个C ++服务器和两个客户端(红宝石和Java).一切都在64位linux机器(java 1.7.0_17)上运行.ruby客户端可以正常工作,但是java版本会出现问题. 在Java中,我尝试 ...
- Java网络编程(一)Socket套接字
一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...
最新文章
- Mocha Pro 2020中文版
- Linux 中启用 Shell 脚本的调试模式
- 如何得到当前application server的host name和port number
- 怎样呵护友谊_【家校联动共同呵护孩子健康成长科普课堂】关爱学生心理健康,守护学生健康成长...
- python中df head_解决Python spyder显示不全df列和行的问题
- 论文笔记_S2D.05-2012-ECCV-从立体图像中提取与场景一致的三维对象和深度
- 什么是视频数据结构化?
- Windows 下使用苹果鼠标、键盘
- C语言中程序设计题 计算机二级考试
- 在word中怎么实现奇数页页眉用本章标题,偶数页用论文标题?
- 防止vps上SSH被猜测密码
- 《周志华机器学习》简要
- Vue 集成 stylus和stylus-loader
- [ZZ]一些界面标准规范(来自因特网)
- 为什么单页面的seo不友好?如何解决这一问题?
- Dijkstra——去北京看奥运
- Python之子域名查询
- Android与PC通过USB连接通信(一)
- JAVA日志技术 Logback
- 斯金纳的行为主义和华生的人格理论和多拉德和米勒的刺激反应理论和罗特的社会学习理论