Подключение с помощью 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
Как обрабатывать исключения в сетевых приложениях
Как задать возможности сетевого подключения
Ссылки
Примеры