Spring Stomp Web Sockets Client for Android

Pra*_*A.K 5 android stomp push-notification websocket spring-boot

有人可以让我知道如何从android客户端连接到spring stomp Web套接字。

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

请告诉我如何从android应用程序连接到此套接字?甚至我都不知道我需要使用哪个Android客户端来连接到此套接字和主题。提前致谢

Abd*_*man 0

我正在经历同样的问题。我发现 spring 提供了默认的 web-socket 连接器库,我用它们来测试服务器端的代码。

@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");
    }
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常。您只需稍作修改即可将其用于您的 Android,并且所有依赖项都可以从此处下载。