2015-12-03 64 views
4

有人請讓我知道如何連接到從Android客戶端的春天跺腳網絡套接字。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應用此套接字?即使我不知道我需要使用哪個Android客戶端連接到此套接字和主題。 在此先感謝

回答

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

此代碼正常工作。你可以使用這個爲你的android幾乎沒有修改和所有依賴這可以從here下載。