我正在使用 this guide实现一个简单的 Stomp 客户端:
WebSocketClient webSocketClient = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.afterPropertiesSet();
stompClient.setTaskScheduler(taskScheduler); // for heartbeats
stompClient.setMessageConverter(new StringMessageConverter());
StompSessionHandler sessionHandler = new MySessionHandler();
stompClient.connect("ws://server/endpoint", sessionHandler);
// WAITING HERE
当连接完成时,它应该异步地向 MySessionHandler
报告:
public class MySessionHandler extends StompSessionHandlerAdapter
{
@Override
public void afterConnected(StompSession session, StompHeaders connectedHeaders)
{
// WAITING FOR THIS
}
}
所以问题是:WAITING HERE
行应该如何等待 WAITING FOR THIS
行?有没有特定的 Spring 方法可以做到这一点?如果不是,哪种通用 Java 方式最适合这里?
最佳答案
也许是 java.util.concurrent.CountDownLatch
可以这样解决你的问题:
CountDownLatch latch = new CountDownLatch(1);
StompSessionHandler sessionHandler = new MySessionHandler(latch);
stompClient.connect("ws://server/endpoint", sessionHandler);
// wait here till latch will be zero
latch.await();
还有你的MySessionHandler
实现:
public class MySessionHandler extends StompSessionHandlerAdapter {
private final CountDownLatch latch;
public MySessionHandler(final CountDownLatch latch) {
this.latch = latch;
}
@Override
public void afterConnected(StompSession session,
StompHeaders connectedHeaders) {
try {
// do here some job
} finally {
latch.countDown();
}
}
}
关于java - 如何等待 Spring WebSocketStompClient 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38947002/