Для чего используется компонент пути URI в веб-сокете? - PullRequest
0 голосов
/ 19 июня 2020

Клиент инициирует рукопожатие веб-сокета и может указать собственный путь URI для использования.

    GET **/chat** HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Origin: http://example.com
    Sec-WebSocket-Protocol: chat, superchat
    Sec-WebSocket-Version: 13

URI веб-сокета принимает следующую форму: ws-URI = "ws:" "//" хост [":" порт] путь ["?" query]

Если я развертываю сервер websocket, прослушивающий ws://localhost:8080/, и клиент подключается к нему со следующим uri ws://localhost:8080/chat, в чем разница? Зачем вообще нужен компонент пути? Это там только для балансировки нагрузки? Или эти «конечные точки» изолированы?

Следующий оператор в RF C меня довольно сбивает с толку:

Используется «Request-URI» метода GET [RFC2616] для определения конечной точки соединения WebSocket, как для обеспечения возможности обслуживания нескольких доменов с одного IP-адреса, так и для обеспечения возможности обслуживания нескольких конечных точек WebSocket одним сервером. ( ЗДЕСЬ )

1 Ответ

1 голос
/ 20 июня 2020

Если ваша служба websocket всегда обрабатывает каждое соединение одинаково, тогда нет необходимости требовать строку пути или строку запроса в URI. (Ну, технически у вас должна быть строка пути, но каждый раз это может быть только один символ '/'.)

Однако, если ваша служба websocket хочет иметь возможность предоставлять разный контент для разных клиентов, то использование строки пути в URI может быть удобным способом для клиентов указать, какой тип контента им интересен. Возможно, ваша служба чата предлагает чаты для нескольких разных тем, и в этом случае вы можете решить попросите клиента использовать строку пути, чтобы указать желаемый topi c. Что-то вроде ws://localhost:8080/sport, ws://localhost:8080/politics или ws://localhost:8080/cooking, или вы можете пойти дальше и иметь ws://localhost:8080/sport/football, ws://localhost:8080/sport/golf и ws://localhost:8080/sport/tennis и т. Д.

Запрос -URI "метода GET [RFC2616] используется для идентификации конечной точки соединения WebSocket, чтобы оба домена могли обслуживаться с одного IP-адреса ...

Это просто обычный виртуальный хостинг. Веб-сервер, работающий с одним IP-адресом, может поддерживать несколько веб-сайтов на основе host части URI.

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

Каждый из приведенных мной примеров путей идентифицирует отдельную независимую конечную точку, обслуживаемую одним вашим сервером websocket.

В этом конкретном примере конечная точка веб-сокета представляет собой своего рода чат, но в более общем плане конечная точка веб-сокета связана с каким-либо потоком данных, часто с односторонним каналом (веб-сокет может предлагать поток текущего цены на акции для некоторой коллекции акций, указанной в строке запроса URI), но потенциально двунаправленный канал и потенциально интерактивный птичий канал (например, ваш чат).

...