Клиент для веб-сокетов Spring Stomp для Android

Может кто-нибудь, пожалуйста, дайте мне знать, как подключиться к веб-кластеру Spring Stomp от Android-клиента.

WebSocketConfig.java

import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/pushticket"); config.setApplicationDestinationPrefixes("/rest"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ticket").withSockJS(); } } 

PushMessageNotifier.java

 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.stereotype.Service; @Service @EnableAsync public class PushMessageNotifier { private SimpMessagingTemplate simpMessagingTemplate; @Autowired public PushMessageNotifier(SimpMessagingTemplate simpMessagingTemplate) { this.simpMessagingTemplate = simpMessagingTemplate; } @Async public Boolean pushToUI(TicketView ticketView) { Boolean result = false; if (null != ticketView) { this.simpMessagingTemplate.convertAndSend("/pushticket/ticket", ticketView); result = true; } return result; } } 

Скажите, пожалуйста, как я могу подключиться к этому сокету из приложения Android? Даже у меня нет идеи, какой клиент андроида мне нужно использовать для подключения к этому сокету и теме. заранее спасибо

Я переживал одну и ту же проблему. Я обнаружил, что Spring предоставляет стандартную библиотеку сокетов для веб-сокетов, которую я использовал для тестирования моего кода на стороне сервера.

 @LocalServerPort private int port; private SockJsClient sockJsClient; private WebSocketStompClient stompClient; private final WebSocketHttpHeaders headers = new WebSocketHttpHeaders(); @Before public void setup() { List<Transport> transports = new ArrayList<>(); transports.add(new WebSocketTransport(new StandardWebSocketClient())); this.sockJsClient = new SockJsClient(transports); this.stompClient = new WebSocketStompClient(sockJsClient); this.stompClient.setMessageConverter(new MappingJackson2MessageConverter()); } @Test public void getGreeting() throws Exception { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<Throwable> failure = new AtomicReference<>(); StompSessionHandler handler = new TestSessionHandler(failure) { @Override public void afterConnected(final StompSession session, StompHeaders connectedHeaders) { session.subscribe("/user/testuser1/reply", new StompFrameHandler() { @Override public Type getPayloadType(StompHeaders headers) { return Greeting.class; } @Override public void handleFrame(StompHeaders headers, Object payload) { MessageSendDTO greeting = (MessageSendDTO) payload; try { System.out.println("#################### "+greeting.getWriter()); assertEquals("testuser1", greeting.getWriter()); } catch (Throwable t) { failure.set(t); } finally { session.disconnect(); latch.countDown(); } } }); try { MessageSendDTO dto= new MessageSendDTO(); dto.setWriter("testuser1"); dto.setReceiver("testuser2"); dto.setMessageBody("TESTING "); GsonBuilder builder = new GsonBuilder(); Gson gson = builder.create(); //session.send("/app/newMessage", new HelloMessage("Spring")); session.send("/app/newMessage", dto); } catch (Throwable t) { failure.set(t); latch.countDown(); } } }; this.stompClient.connect("ws://localhost:8080/newMessage", this.headers, handler, this.port); if (latch.await(20, TimeUnit.SECONDS)) { if (failure.get() != null) { throw new AssertionError("", failure.get()); } } else { fail("Greeting not received"); } 

Этот код работает отлично. Вы можете использовать это для своего андроида с небольшой модификацией, и все зависимости для этого можно скачать здесь .

Intereting Posts
VideoView onPrepared не вызывается, если VideoView невидим Приемник смены режима звонка Широковещательный приемник? Размещение текстовой метки ToggleButton для включения и выключения Android Studio 0.8.14: Дубликаты файлов при упаковке APK Приложение Phonegap (онлайн-сборка) – нет подключения к Интернету и сетевого статуса Есть ли некоторые инструменты для реализации подхода «Code first» на Android Ошибка медиаплеера (-19,0) после повторных игр IllegalStateException: база данных уже закрыта (с использованием ViewPager) Почему атрибут loadload элемента ссылки ненадежный для браузеров Android? Продвижение программы TextView с возможностью прокрутки в Android Доступ к GoogleMap за пределами потока пользовательского интерфейса в Android Как я могу обойти Android-менеджер Chrome для OAuth? Как загрузить изображения в качестве фона в LibGDx? Android VideoView – как воспроизводить видео в последовательности Как рассчитать высоту над уровнем моря