Nelle Universal App possiamo creare una comunicazione in tempo reale con un server grazie al protocollo WebSocket e le classi presenti nel namespace Window.Networking.Sockets.
La prima operazione è aprire la connessione con un'istanza di MessageWebSocket e il suo metodo ConnectAsync, a cui passare l'URI del server.
var socket = new MessageWebSocket(); socket.Control.MessageType = SocketMessageType.Utf8; socket.MessageReceived += MessageReceived; Uri server = new Uri("ws://localhost/WebSocketSample/Sample.ashx"); await socket.ConnectAsync(server);
Grazie all'evento MessageReceived possiamo intercettare l'invio di un messaggio dal server e recuperare il testo in esso contenuto.
private void MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args) { try { using (DataReader reader = args.GetDataReader()) { reader.UnicodeEncoding = UnicodeEncoding.Utf8; var msg = reader.ReadString(reader.UnconsumedBufferLength); } } catch (Exception ex) { WebErrorStatus status = WebSocketError.GetStatus(ex.GetBaseException().HResult); } }
Inviare un messaggio è altrettanto semplice attraverso la proprietà OutputStream:
var messageWriter = new DataWriter(socket.OutputStream); messageWriter.WriteString("testo del messaggio"); await messageWriter.StoreAsync();
Il protocollo WebSocket è semplice e al tempo stesso molto versatile e permette uno scambio di dati tra client e server in modo molto performante.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Creare una libreria CSS universale: i bottoni
Disabilitare automaticamente un workflow di GitHub
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Evitare il flickering dei componenti nel prerender di Blazor 8
Utilizzare gRPC su App Service di Azure
Creare una libreria CSS universale: Clip-path
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Sfruttare al massimo i topic space di Event Grid MQTT
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Effettuare il refresh dei dati di una QuickGrid di Blazor