2012-08-30 6 views
21

Sto implementando un servlet Jetty Websocket. Quando il server riceve una nuova connessione, voglio inviare un messaggio che verrà letto dalla funzione onopen di websocket. Desidero che questo messaggio venga inviato solo durante l'apertura e non utilizzando la funzione regolare connection.SendMessage(). è possibile farlo? e come?è possibile inviare un dato quando viene aperta una connessione web socket

risposta

15

Non vi è alcun supporto per questo nel protocollo ma è possibile fondere qualcosa da soli.

  • Quando il server completa l'handshake, memorizza il messaggio iniziale che si desidera consegnare a un client.
  • Nella funzione onopen del client, inviare una richiesta di "lettura messaggio iniziale".
  • Nel server, verificare che questo client non abbia letto il suo messaggio iniziale; rispondere con il messaggio; imposta una bandiera dicendo che il messaggio iniziale è stato inviato.
  • Ora client e server sono liberi di inviare altri messaggi.
+0

Grazie, mi stavo chiedendo se potrei aver perso qualcosa durante la ricerca online. Seguirò l'approccio che hai suggerito. – DPD

34

Non dimenticare la stringa di query. È valido nell'URL di WebSocket.

new Websocket('ws://yoursite.com/path?a=1&b=2&c=3') 

allora si può facilmente analizzare questo URL sul lato server per recuperare i dati.

+0

ya ma come si analizza l'url sul lato server? dove è reso disponibile l'url? –

+0

dovrebbe probabilmente menzionare anche l'opzione di un @PathParam ... vedi [questa risposta] (https://stackoverflow.com/questions/21559260/how-do-i-pass-a-parameter-to-the-onopen- metodo-con-jee7-WebSockets) –