2015-08-28 34 views
11

Sto provando a testare websocket senza utilizzare la libreria socketjs e inoltre non voglio aggiungere alcuna connessione stomp.Spring 4 websocket senza STOMP, socketjs

Seguo l'esempio dalla domanda StackOverflow: WebSocket with Sockjs & Spring 4 but without Stomp

Quindi, senza server di Stomp, sono riuscito a connettersi tramite socketjs biblioteca con un'url: WS: // localhost: 8080/di saluto/741/0tb5jpyi/websocket

E ora voglio rimuovere la libreria socketjs per consentire la connessione websocket grezzo (può essere dispositivi come Android, iOS, ecc ...)

Quando rimuovo il parametro: .withSockJS(), I non è stato possibile connettersi tramite websocket.

ho provato i seguenti URL, ma non ha funzionato:

ws://localhost:8080/greeting/394/0d7xi9e1/websocket not worked 
ws://localhost:8080/greeting/websocket not worked 
ws://localhost:8080/greeting/ not worked 

quale URL devo utilizzare per la connessione?

+0

come hai fatto la richiesta di aggiornamento a Tomcat che indica che "aggiornare il modulo protocollo HTTP per WS" –

risposta

5

Si dovrebbe usare ws://localhost:8080/greeting:

new WebSocket('ws://localhost:8080/greeting') 
+0

ha funzionato con javascript ma con client di riposo avanzato, ho ricevuto 403 errore proibito. – melihcoskun

+0

Il comportamento predefinito è di accettare solo le stesse richieste di origine, questo potrebbe darti un 403 quando usi il client avanzato di riposo. Configura le origini consentite sul tuo endpoint: registry.addHandler (greetingHandler(), "/greeting").setAllowedOrigins("*"); –

+0

funziona. Grazie mille – melihcoskun

7

Sto utilizzando websockets senza STOMP nel mio progetto.

La seguente configurazione funziona con spring-boot.

aggiuntivo di avvio primavera websocket dipendenza nel pom.xml

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-websocket</artifactId> 
    <version>${spring-boot.version}</version> 
</dependency> 

Quindi aggiungere una classe (qui WebSocketServerConfiguration.java), che configura il vostro websocket:

@Configuration 
@EnableWebSocket 
public class WebSocketServerConfiguration implements WebSocketConfigurer { 

    @Autowired 
    protected MyWebSocketHandler webSocketHandler; 

    @Override 
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 
     registry.addHandler(webSocketHandler, "/as"); 
    } 
} 

finalmente si può scrivere il WebsocketHandler. Spring fornisce diverse classi astratte per WebSocketHandlers (nel pacchetto principale: org.springframework.web.socket.handler). Il mio websocket è configurato senza STOMP e il mio client non usa socket.js. Pertanto, MyWebSocketHandler estende TextWebSocketHandler e sovrascrive i metodi per errori, aprendo e chiudendo connessioni e testi ricevuti.

@Component 
public class MyWebSocketHandler extends TextWebSocketHandler { 
    ... 

    @Override 
    public void handleTransportError(WebSocketSession session, Throwable throwable) throws Exception { 
     LOG.error("error occured at sender " + session, throwable); 
     ... 
    } 

    @Override 
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { 
     LOG.info(String.format("Session %s closed because of %s", session.getId(), status.getReason())); 

     ... 
    } 

    @Override 
    public void afterConnectionEstablished(WebSocketSession session) throws Exception { 
     LOG.info("Connected ... " + session.getId()); 

     ... 
    } 

    @Override 
    protected void handleTextMessage(WebSocketSession session, TextMessage jsonTextMessage) throws Exception { 
     LOG.debug("message received: " + jsonTextMessage.getPayload()); 
     ... 
    } 
} 
+0

grazie per la risposta duffy356, ho la stessa configurazione . Sto provando a testare la mia connessione tramite il plugin per client di riposo avanzato di chrome. Nel mio precedente progetto sono stato in grado di connettere websocket a quel plugin. Ma il progetto non era basato sulla primavera. Ora non riesco a connettere websocket tramite url: ws: // localhost: 8080/greeting /. Non riuscivo a trovare l'URL giusto da connettere. hai qualche idea? – melihcoskun

+0

il plug-in avanzato per il client di riposo chrome supporta i websocket? – duffy356

+0

prova a connetterti al tuo Server dalla tua console Chrome. – duffy356