Spring 4.3.3 WebSocket-STOMPプロトコル統合(2.1)-WebSocket-stomp子プロトコル通信小栗
5640 ワード
stomp-jsp間の通信はstomp、sockett.js/stomp.jsを通じて実現した通信です.jspやjsを書くのが面倒くさいと思ったら、jsはあまり分かりません.web SocketStopのclientでテストします.コードを見ます
pom.xml依存:
pom.xml依存:
org.glassfish.tyrus.bundles
tyrus-standalone-client
1.13
Junnit Testの方法は以下の通りです.具体的にはWebSocketのjunnitと似ています.多く説明しなくて、拙僧が引退します. /**
* js endpoint
* @throws ExecutionException
* @throws InterruptedException
*/
// @Test
public void testSocketJsEndpoint() throws InterruptedException, ExecutionException {
//js url
String jsUrl = "ws://localhost:18080/JeeSite/hello";
//for js endpoint wrap
List transports = Lists.newArrayList();
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
WebSocketClient transport = new SockJsClient(transports);
//js endpoint end
WebSocketStompClient stompClient = new WebSocketStompClient(transport);
stompClient.setMessageConverter(new StringMessageConverter());
//stompsession Receiptable
ThreadPoolTaskScheduler task = new ThreadPoolTaskScheduler();
task.initialize();
stompClient.setTaskScheduler(task);
StompSessionHandler sessionHandler = new MyStompSessionHandler();
ListenableFuture ret = stompClient.connect(jsUrl, sessionHandler);
ret.addCallback(new ListenableFutureCallback() {
@Override
public void onSuccess(StompSession session) {
session.subscribe("/app/subscribeme", new StompFrameHandler() {
@Override
public void handleFrame(StompHeaders headers, Object payload) {
System.out.println(payload);
}
@Override
public Type getPayloadType(StompHeaders headers) {
return String.class;
}
});
session.subscribe("/topic/hi", new StompFrameHandler() {
@Override
public void handleFrame(StompHeaders headers, Object payload) {
System.out.println("subscribe message : ");
System.out.println(payload);
}
@Override
public Type getPayloadType(StompHeaders headers) {
return Object.class;
}
});
}
@Override
public 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() {
@Override
public void run() {
System.out.println("js endpoint send msg success.");
}
});
}
/**
* java stomp client client 。
* @throws InterruptedException
* @throws ExecutionException
*/
// @Test
public 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 ret = stompClient.connect(clientUrl, sessionHandler);
ret.addCallback(new ListenableFutureCallback() {
@Override
public void onSuccess(StompSession session) {
session.subscribe("/app/subscribeme", new StompFrameHandler() {
@Override
public void handleFrame(StompHeaders headers, Object payload) {
System.out.println("subscribe message : ");
System.out.println(payload);
}
@Override
public Type getPayloadType(StompHeaders headers) {
return String.class;
}
});
session.subscribe("/topic/hi", new StompFrameHandler() {
@Override
public void handleFrame(StompHeaders headers, Object payload) {
System.out.println(payload);
}
@Override
public Type getPayloadType(StompHeaders headers) {
return Object.class;
}
});
}
@Override
public 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() {
@Override
public void run() {
System.out.println("java client endpoint send msg success.");
}
});
}
class MyStompSessionHandler extends StompSessionHandlerAdapter {
@Override
public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
Map headers = connectedHeaders.toSingleValueMap();
for (Entry kv : headers.entrySet()) {
System.out.println(kv.getKey() + " - " + kv.getValue());
}
System.out.println("connected session : "+session.getSessionId());
}
}