Spring4.3.3 WebSocket-STOMP协议集成 (2.1)-WebSocket-stomp子协议通讯小栗子

来源:互联网 发布:软件开发流程模版 编辑:程序博客网 时间:2024/05/15 06:50

                      上一篇中说到:stomp - jsp之间的通讯,是通过stomp,socket.js/stomp.js实现的通讯。如果觉得写jsp或者js麻烦,或者不怎么会js,不是太懂,可以用webSocketStomp的client来测试。下面看代码:

                 pom.xml依赖:

<!-- stompclient  test--><dependency>    <groupId>org.glassfish.tyrus.bundles</groupId>    <artifactId>tyrus-standalone-client</artifactId>    <version>1.13</version></dependency>

              JunitTest方法如下:具体和WebSocket的junit相似,不多解释了,老衲告退....

/** * 连接js endpoint端点 * @throws ExecutionException  * @throws InterruptedException  *///@Testpublic void testSocketJsEndpoint() throws InterruptedException, ExecutionException {//js urlString jsUrl = "ws://localhost:18080/JeeSite/hello";//for js endpoint wrapList<Transport> transports = Lists.newArrayList();transports.add(new WebSocketTransport(new StandardWebSocketClient()));WebSocketClient transport = new SockJsClient(transports);//js endpoint endWebSocketStompClient stompClient  = new WebSocketStompClient(transport);stompClient.setMessageConverter(new StringMessageConverter());//stompsession 使用必须配置ReceiptableThreadPoolTaskScheduler task = new ThreadPoolTaskScheduler();task.initialize();stompClient.setTaskScheduler(task);StompSessionHandler sessionHandler = new MyStompSessionHandler();ListenableFuture<StompSession> ret = stompClient.connect(jsUrl, sessionHandler);ret.addCallback(new ListenableFutureCallback<StompSession>() {@Overridepublic void onSuccess(StompSession session) {session.subscribe("/app/subscribeme", new StompFrameHandler() {@Overridepublic void handleFrame(StompHeaders headers, Object payload) {System.out.println(payload);}@Overridepublic Type getPayloadType(StompHeaders headers) {return String.class;}});session.subscribe("/topic/hi", new StompFrameHandler() {@Overridepublic void handleFrame(StompHeaders headers, Object payload) {System.out.println("subscribe message : ");System.out.println(payload);}@Overridepublic Type getPayloadType(StompHeaders headers) {return Object.class;}});}@Overridepublic void onFailure(Throwable ex) {ex.printStackTrace();}});StompSession sess = ret.get();//跟踪发送消息返回状态,必须启用该项sess.setAutoReceipt(true);Receiptable recpt = sess.send("/app/hi", "i'm js monkey stanthem.");recpt.addReceiptTask(new Runnable() {@Overridepublic void run() {System.out.println("js endpoint send msg success.");} });}/** * java stomp client 连接client 端点。 * @throws InterruptedException * @throws ExecutionException *///@Testpublic void testStompClientEndpoint() throws InterruptedException, ExecutionException {String clientUrl = "ws://localhost:18080/JeeSite/client";WebSocketClient client = new StandardWebSocketClient();WebSocketStompClient stompClient = new WebSocketStompClient(client);stompClient.setMessageConverter(new StringMessageConverter());stompClient.setReceiptTimeLimit(300);//配置心跳频率,默认就是下面这个间隔stompClient.setDefaultHeartbeat(new long[]{10000l,10000l});//stompsession 使用必须配置Receiptable, taskScheduler作用是//Configure a scheduler to use for heartbeats and for receipt tracking.//为配置心跳频率和跟踪发送状态 准备的线程池ThreadPoolTaskScheduler task = new ThreadPoolTaskScheduler();task.initialize();stompClient.setTaskScheduler(task);StompSessionHandler sessionHandler = new MyStompSessionHandler();ListenableFuture<StompSession> ret = stompClient.connect(clientUrl, sessionHandler);ret.addCallback(new ListenableFutureCallback<StompSession>() {@Overridepublic void onSuccess(StompSession session) {session.subscribe("/app/subscribeme", new StompFrameHandler() {@Overridepublic void handleFrame(StompHeaders headers, Object payload) {System.out.println("subscribe message : ");System.out.println(payload);}@Overridepublic Type getPayloadType(StompHeaders headers) {return String.class;}});session.subscribe("/topic/hi", new StompFrameHandler() {@Overridepublic void handleFrame(StompHeaders headers, Object payload) {System.out.println(payload);}@Overridepublic Type getPayloadType(StompHeaders headers) {return Object.class;}});}@Overridepublic void onFailure(Throwable ex) {ex.printStackTrace();}});StompSession sess = ret.get();//跟踪发送消息返回状态,必须启用该项sess.setAutoReceipt(true);//发一个消息Receiptable recpt = sess.send("/app/hi", "i'm java stomp client monkey stanthem.");recpt.addReceiptTask(new Runnable() {@Overridepublic void run() {System.out.println("java client endpoint send msg success.");} });}

class MyStompSessionHandler extends StompSessionHandlerAdapter {@Overridepublic void afterConnected(StompSession session, StompHeaders connectedHeaders) {Map<String, String> headers = connectedHeaders.toSingleValueMap();for (Entry<String, String> kv : headers.entrySet()) {System.out.println(kv.getKey() + " - " + kv.getValue());}System.out.println("connected session : "+session.getSessionId());}}


0 0
原创粉丝点击