Поделиться через


Подключение с помощью MessageWebSocket (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

В этом разделе демонстрируется, как отправлять и получать полные сообщения данных с помощью MessageWebSocket в приложении среды выполнения Windows.

Класс MessageWebSocket предоставляет абстракцию протокола WebSocket на основе сообщений. При использовании MessageWebSocket все сообщение WebSocket считывается или записывается за одну операцию. Класс StreamWebSocket, напротив, позволяет считывать разделы сообщения при каждой операции чтения, не требуя чтения всего сообщения за одну операцию.

MessageWebSocket обычно используется в сценариях с не очень большими сообщениями. Поддерживаются двоичные файлы и кодировка UTF-8. Для сообщений UTF-8 необходимо использовать MessageWebSocket. StreamWebSocket поддерживает только двоичные сообщения.

Необходимые условия

В следующих примерах, основанных на примере WebSocket, используется JavaScript. Общую справку по созданию приложения среды выполнения Windows на JavaScript см. в разделе Создание первого приложения среды выполнения Windows на JavaScript. Для завершения асинхронных операций в этом разделе также используются объекты Promise в JavaScript. Подробнее об этой технике программирования см. в разделе об асинхронном программировании на JavaScript с использованием объектов Promise.

Чтобы подготовить приложение среды выполнения Windows для работы в сети, необходимо настроить соответствующие возможности сетевого подключения в файле проекта Package.appxmanifest. Если приложению нужно подключаться в качестве клиента к удаленным службам в Интернете, для этого требуется возможность Интернет (клиент). Если же нужно подключаться в качестве клиента к удаленным службам в домашней или рабочей сети, требуется возможность Домашняя/рабочая сеть.

Примечание  В Windows Phone имеется только один тип возможности сетевого подключения — Интернет (клиент и сервер). Он обеспечивает приложению все формы доступа к сети.

 

Подробнее: Как задать возможности сетевого подключения.

Использование MessageWebSocket для отправки данных

Код в этом разделе создает новый MessageWebSocket, подключается к серверу WebSocket и отправляет на него данные. После успешного установления подключения приложение ожидает вызова события MessageWebSocket.MessageReceived, которое свидетельствует о получении данных.

Примечание  Можно отображать сообщения или уведомлять пользователя при возникновении определенных событий (например, при установлении соединения или возникновении ошибки).

 

  • Откройте папку js. Откройте используемый вами файл JS и добавьте в него следующий код.

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

Регистрация обратного вызова для события MessageWebSocket.MessageReceived

При возникновении события MessageWebSocket.MessageReceived вызывается зарегистрированный обратный вызов, который получает данные из MessageWebSocketMessageReceivedEventArgs.

  • Добавьте в ваш файл JS следующий код.

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

Регистрация события обратного вызова MessageWebSocket.Closed

При возникновении события MessageWebSocket.Closed вызывается зарегистрированный обратный вызов, который получает данные из WebSocketClosedEventArgs для закрытия подключения.

  • Добавьте следующий код в ваш файл 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;
    }
    

Краткая сводка и дальнейшие действия

В этом учебнике мы узнали, как подключаться к серверу WebSocket, а также отправлять и получать данные, используя MessageWebSocket.

Полный код, демонстрирующий использование WebSocket для отправки и получения данных, приводится в примере WebSocket.

Связанные разделы

Прочие ссылки

Асинхронное программирование на JavaScript с использованием объектов Promise

Подключение с использованием WebSocket

Создание первого приложения среды выполнения Windows на JavaScript

Как подключаться с помощью StreamWebSocket

Как обрабатывать исключения в сетевых приложениях

Как задать возможности сетевого подключения

Ссылки

MessageWebSocket

Windows.Networking.Sockets

Примеры

Пример WebSocket