Как запрограммировать веб-сервер UDP, так как HTTP обычно использует TCP? - PullRequest
0 голосов
/ 08 января 2020

Вот мое понимание того, как работает клиент-серверный HTTP-сервер.

  1. Клиент создает сокетное соединение TCP для подключения к серверу и отправляет данные.
  2. Сервер создает сокетное соединение TCP для прослушивания входящих запросов.

Таким образом, похоже, что и клиент, и сервер должны договориться об использовании Transport protocol для использования (в данном случае TCP). Но если мы хотим, чтобы веб-сайт работал по протоколу UDP / QUI C, нам нужен и клиент, и сервер, чтобы создать сокетное соединение UDP . Но некоторые сайты используют TCP, а другие используют UDP ...

Значит ли это, что это должно выглядеть так? Чтобы заранее знать, какой протокол использует веб-сайт?

if (URI == 'https://www.google.com') {
  // Website that works over UDP
  client.create.UDP.socket
  client.sendData

  server.create.UDP.socket
  server.receive.data
} else {
  // Website that works over TCP
  client.create.TCP.socket
  client.sendData

  server.create.TCP.socket
  server.receive.data
}

Таким образом, клиент должен вести учет того, какой веб-сайт использует TCP, а какие веб-сайты используют UDP / QUI C и создать сокет такого типа для связи с ним. это?

1 Ответ

1 голос
/ 08 января 2020

Если протокол поддерживает как TCP, так и UDP, сервер прослушивает как порт TCP, так и порт UDP. Номер порта обычно одинаков, например, DNS использует TCP-порт 53 и UDP-порт 53.

Обычно клиент имеет предпочтение. Допустим, он предпочитает TCP. Клиент сначала попытается соединиться с TCP. Если сервер не отвечает, клиент повторяет попытку с UDP. Кроме того, сервер может отвечать по TCP, но попросить клиента переключиться на UDP. Затем клиент может принять решение продолжить TCP или переключиться на UDP.

Для QUI C 1 2 , браузер сначала подключиться с помощью HTTP через TCP. Сервер ответит сообщением о том, что он также поддерживает QUI C. Если браузер также поддерживает этот протокол, он подключится к серверу, используя QUI C.

...