Как использовать расширенные элементы управления сокета (HTML)

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

В этом разделе: использование расширенных элементов управления сокетами при применении DatagramSocket, StreamSocket и StreamSocketListener в приложениях Магазина Windows.

Что необходимо знать

Технологии

  • Windows.Networking.Sockets

    Устанавливает сетевые подключения с использованием сокетов и протоколов WebSocket.

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

  • Следующие примеры этого раздела написаны на JavaScript. Рекомендуется иметь базовое представление о сокетах.

Обзор расширенных элементов управления

Классы DatagramSocket, StreamSocket и StreamSocketListener следуют одной модели использования расширенных элементов управления. Основные классы, соответствующие каждому из названных выше классов, являются связанными классами для доступа к расширенным элементам управления:

Базовая модель использования расширенных элементов управления одинакова для всех трех классов. В следующем примере применяется StreamSocket, но такой же процесс можно использовать для DatagramSocket или StreamSocketListener.

  • Создайте элемент управления StreamSocket.
  • Используйте свойство StreamSocket.Control, чтобы получить экземпляр StreamSocketControl, связанный с объектом StreamSocket.
  • Чтобы задать дополнительный параметр сокета, получите или установите свойство StreamSocketControl.

Перед выполнением операции подключения или привязки сокета приложение всегда должно устанавливать свойство для StreamSocketControl. Поэтому лучше всего устанавливать расширенные свойства сразу после создания сокета. Не пытайтесь установить свойство StreamSocketControl после того, как сокет вызовет один из методов ConnectAsync.

Элементы управления сокета датаграмм

DatagramSocket поддерживает сетевое взаимодействие с помощью UDP-сокета датаграмм. Для DatagramSocket доступен только один дополнительный параметр:

Качество обслуживания влияет на приоритет потока при получении пакетов для объекта DatagramSocket. Вы можете установить для качества обслуживания одно из двух возможных значений из перечисления SocketQualityOfService. При создании DatagramSocket параметр normal задается по умолчанию. Параметр lowLatency повышает приоритет потока при получении пакетов. Обычно этот параметр используется только для звуковых или других приложений, чувствительных к задержкам.

В следующем примере создается DatagramSocket и для DatagramSocketControl.QualityOfService устанавливается значение lowLatency для чувствительных к задержкам приложений. После этого приложение может вызывать другие методы для DatagramSocket, чтобы выполнить привязку к сокету или подключиться к нему.

    var clientSocket = new Windows.Networking.Sockets.DatagramSocket();

    // The control object is associated with the socket 

    // Get the current setting for quality of service
    // This isn't needed, but it shows how to get the current setting
    var currentSetting = clientSocket.Control.QualityOfService; 

    // Set quality of service to low latency
    clientSocket.Control.QualityOfService = SocketQualityOfService.LowLatency;
   
    // Now use the DatagramSocket to call:
    // BindEndpointAsync, BindServiceNameAsync, 
    // ConnectAsync, GetOutputstreamAsync, or 
    // JoinMulticastGroup

Элементы управления сокета StreamSocket

StreamSocket поддерживает сетевое взаимодействие с помощью TCP-сокета потока. Существует несколько дополнительных параметров для StreamSocket:

В этом примере мы изменим свойство StreamSocketControl.NoDelay, которое контролирует включение или отключение алгоритма Нагля.

Алгоритм Нагля повышает эффективность сетей TCP/IP, уменьшая количество пакетов, которые надо отправлять по сети. Он пытается решить проблемы приложения, которое многократно передает данные небольшими блоками. Размер заголовка TCP-пакета для IPv4 без каких-либо других параметров заголовка равен 40 байт (IP — 20 байт, TCP — 20 байт). Поэтому, если программа отправляет пакет размером всего 4 байта, служебные данные оказываются очень большими. Это может происходить при использовании протоколов удаленного доступа (например, Telnet или SSH), где большая часть нажатий клавиш создают только один-два байта данных, которые передаются немедленно. При медленном подключении множество таких пакетов может передаваться по сети одновременно. Алгоритм Нагля объединяет несколько небольших исходящих сообщений и отправляет их вместе. Если отправитель не получает подтверждения отправки пакета, он продолжает буферизацию выходных данных, пока не соберет полный пакет отправляемых данных. Это позволяет отправлять все данные вместе. Влияние использования алгоритма Нагля заключается в увеличении пропускной способности за счет задержки. Хорошо написанное приложение, которое само сохраняет отправляемые данные в буфере, не нуждается в использовании алгоритма Нагля.

По умолчанию при создании объекта StreamSocket для этого параметра устанавливается значение true, которое отключает алгоритм Нагля. Этот параметр сокращает возможные задержки при отправке небольших сообщений. Однако если вы используете StreamSocket в программе, которая отправляет множество небольших пакетов, а задержка не имеет значения, то можно включить алгоритм Нагля, чтобы повысить эффективность.

В следующем примере создается класс StreamSocket и устанавливается для свойства StreamSocketControl.NoDelay значение false. После этого приложение может вызывать другие методы StreamSocket, чтобы подключиться к сокету.

    var clientSocket = new Windows.Networking.Sockets.StreamSocket();

    // The control object is associated with the socket 

    // Get the current setting for this option
    // This isn't needed, but it shows how to get the current setting
    var currentSetting = clientSocket.Control.NoDelay; 

    // Don't disable the nagle algorithm
    clientSocket.Control.NoDelay = false;
   
    // Now you can use the StreamSocket to call one of the
    // ConnectAsync methods

Элементы управления сокета StreamSocketListener

StreamSocketListener поддерживает ожидание входящих сетевых подключений с использованием TCP-сокета потока. Для StreamSocketListener доступен только один дополнительный параметр:

Качество обслуживания влияет на приоритет потока при получении пакетов для объекта StreamSocket, созданного при подключении объекта StreamSocketListener. Вы можете установить для качества обслуживания одно из двух возможных значений из перечисления SocketQualityOfService. Параметр normal задается по умолчанию при создании StreamSocket во время соединения. Параметр lowLatency повышает приоритет потока при получении пакетов для созданного StreamSocket. Обычно этот параметр используется только при принятии подключений для звуковых или других приложений, чувствительных к задержкам.

В следующем примере создается StreamSocketListener, а для StreamSocketListener.QualityOfService устанавливается значение lowLatency для чувствительных к задержкам приложений. После этого приложение может вызывать другие методы StreamSocketListener, чтобы принимать запросы на входящие подключения.

    var listenSocket = new Windows.Networking.Sockets.StreamSocketListener();

    // The control object is associated with the socket 

    // Get the current setting for quality of service
    // This isn't needed, but it shows how to get the current setting
    var currentSetting = listenSocket.Control.QualityOfService; 

    // Set quality of service to low latency
    listenSocket.Control.QualityOfService = SocketQualityOfService.LowLatency;
   
    // Now you can use the StreamSocketListener to 
    // bind to a service name and begin listening for 
    // incoming connection requests

Замечания

Кроме управляющих данных существует ряд связанных классов, которые предоставляют доступ к дополнительной информации о сокете для следующих основных классов:

Модель доступа к дополнительной информации о сокете схожа с моделью доступа к управляющим данным. Далее для примера используется StreamSocket.

Классы информации о сокете и управления сокетом имеют одно важное отличие. Свойства экземпляра StreamSocketControl доступны для чтения или записи (методы доступа get и set). А свойства экземпляра StreamSocketInformation предназначены только для чтения (метод доступа get). Приложение может получить значение свойства экземпляра StreamSocketControl или StreamSocketInformation в любое время после создания StreamSocket. Однако перед выполнением операции подключения или привязки сокета приложение всегда должно устанавливать свойство для экземпляра StreamSocketControl.

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

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

Подключение с помощью сокетов

Как подключиться с помощью сокета датаграмм

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

Защита соединений сокетов с использованием TLS/SSL

Ссылки

DatagramSocket

DatagramSocketControl

DatagramSocketInformation

StreamSocket

StreamSocketControl

StreamSocketInformation

StreamSocketListener

StreamSocketListenerControl

StreamSocketListenerInformation

Windows.Networking.Sockets