Come connettersi con un MessageWebSocket (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Questo argomento ti mostrerà come inviare e ricevere interi messaggi di dati tramite MessageWebSocket in un'app di Windows Runtime.

La classe MessageWebSocket fornisce un'astrazione basata su messaggio del protocollo WebSocket. Se usi MessageWebSocket, l'intero messaggio WebSocket viene letto o scritto in un'unica operazione. Diversamente, il StreamWebSocket consente di leggere parti di un messaggio durante ciascuna operazione di lettura, anziché leggere l'intero messaggio in un'unica operazione.

Un MessageWebSocket viene tipicamente utilizzato negli scenari che presentano messaggi di dimensioni non eccessive. Sono supportati sia i file UTF-8 che binari. Per i messaggi UTF-8, è necessario usare MessageWebSocket, poiché StreamWebSocket supporta solo messaggi binari.

Prerequisiti

Gli esempi seguenti usano JavaScript e sono basati sull'esempio di WebSocket. Per informazioni generali sulla creazione di un'app di Windows Runtime in JavaScript, vedi Creare la prima app di Windows Runtime in JavaScript. Inoltre, in questo argomento si usano promesse JavaScript per eseguire operazioni asincrone. Per altre informazioni su questo modello di programmazione, vedi Programmazione asincrona in JavaScript con promesse.

Per predisporre la tua app di Windows Runtime per l'uso in rete, devi impostare le eventuali funzionalità di rete necessarie nel file Package.appxmanifest del progetto. Se la tua app deve connettersi come client a servizi remoti su Internet, è necessaria la funzionalità Internet (client). Se l'app deve connettersi come client a servizi remoti su una rete domestica o aziendale, è necessaria la funzionalità Rete casa/lavoro.

Nota  In Windows Phone, c'è solo una funzionalità di rete (Internet (client e server)) che consente l'accesso a tutte le reti per l'app.

 

Per altre informazioni, vedi Come impostare le funzionalità di rete.

Usare MessageWebSocket per l'invio di dati

Il codice mostrato in questa sezione consente di creare un nuovo elemento MessageWebSocket, esegue la connessione a un server WebSocket e inviare i dati al server. Dopo avere stabilito una connessione, l'app attende la chiamata all'evento MessageWebSocket.MessageReceived, che indica la ricezione dei dati.

Nota  Potrebbe essere utile visualizzare messaggi all'utente o registrare il verificarsi di determinati eventi, ad esempio quando viene effettuata una connessione o si verifica un errore.

 

  • Apri la cartella js. Apri un nuovo file con estensione js e aggiungi il codice seguente.

    function startSend() {
       if (!messageWebSocket) {
          var webSocket = new Windows.Networking.Sockets.MessageWebSocket();
          // MessageWebSocket supports both utf8 and binary messages.
          // When utf8 is specified as the messageType, then the developer
          // promises to only send utf8-encoded data.
          webSocket.control.messageType = Windows.Networking.Sockets.SocketMessageType.utf8;
          // Set up callbacks
          webSocket.onmessagereceived = onMessageReceived;
          webSocket.onclosed = onClosed;
    
          var serverAddress = new Windows.Foundation.Uri(document.getElementById("serverAddress").value);
    
          try {
             webSocket.connectAsync(serverAddress).done(function () {
             messageWebSocket = webSocket;
             // The default DataWriter encoding is utf8.
             messageWriter = new Windows.Storage.Streams.DataWriter(webSocket.outputStream);
             messageWriter.writeString(document.getElementById("inputField").value);
             messageWriter.storeAsync().done("", sendError);
    
          }, function (error) {
             // The connection failed; add your own code to log or display 
             // the error, or take a specific action.
             });
          } catch (error) {
             // An error occurred while trying to connect; add your own code to  
             // log or display the error, or take a specific action.
          }
    
       }
       else {
          // The connection already exists; go ahead and send the message.
          messageWriter.writeString(document.getElementById("inputField").value);
          messageWriter.storeAsync().done("", sendError);          
       }
    }
    

Registrare il callback per l'evento MessageWebSocket.MessageReceived

Quando si verifica l'evento MessageWebSocket.MessageReceived, il callback registrato viene chiamato e riceve i dati da MessageWebSocketMessageReceivedEventArgs.

  • Aggiungi il codice seguente al file con estensione js.

    function onMessageReceived(args) {
       // The incoming message is already buffered.
       var dataReader = args.getDataReader();
       // Use the dataReader to read data from the received message
    }
    

Registrare il callback per l'evento MessageWebSocket.Closed

Quando si verifica l'evento MessageWebSocket.Closed, il callback registrato viene chiamato e riceve i dati da WebSocketClosedEventArgs per chiudere la connessione.

  • Aggiungi il codice seguente al file con estensione js.

    function onClosed(args) {
       // You can add code to log or display the code and reason
       // for the closure (stored in args.code and args.reason)
       if (messageWebSocket) {
          messageWebSocket.close();
       }
       messageWebSocket = null;
    }
    

Riepilogo e passaggi successivi

In questa esercitazione abbiamo esaminato come eseguire la connessione a un server WebSocket e come inviare e ricevere dati usando un elemento MessageWebSocket.

Per un esempio completo sull'invio e la ricezione di dati mediante WebSocket, vedi l'esempio di WebSocket.

Argomenti correlati

Altro

Programmazione asincrona in JavaScript con le promesse

Connessione con WebSocket

Creare la prima app di Windows Runtime in JavaScript

Come connettersi con un StreamWebSocket

Come gestire le eccezioni nelle app di rete

Come impostare le funzionalità di rete

Riferimenti

MessageWebSocket

Windows.Networking.Sockets

Esempi

Esempio WebSocket