Websocket соединение. Почему мы звоним на ws: //echo.websocket.org? - PullRequest
0 голосов
/ 01 мая 2018

Я пишу код веб-сокета, и у меня пока есть это:

window.onload = function() {

  // Get references to elements on the page.
  var form = document.getElementById('message-form');
  var messageField = document.getElementById('message');
  var messagesList = document.getElementById('messages');
  var socketStatus = document.getElementById('status');
  var closeBtn = document.getElementById('close');

  var socket = new WebSocket('ws://echo.websocket.org');

  // Show a connected message when the WebSocket is opened.
  socket.onopen = function(event) {
    socketStatus.innerHTML = 'Connected to: ' + event.currentTarget.url;
    socketStatus.className = 'open';
  };

  // Handle any errors that occur.
  socket.onerror =  function(error) {
    console.log('WebSocket Error: ' + error);
  };

  form.onsubmit = function(e) {
    e.preventDefault();

    // Retrieve the message from the textarea.
    var message = messageField.value;

    // Send the message through the WebSocket.
    socket.send(message);

    // Add the message to the messages list.
    messagesList.innerHTML += '<li class="sent"><span>Sent:</span>' + message +
                              '</li>';

    // Clear out the message field.
    messageField.value = '';

    return false;
  };

  socket.onmessage = function(event) {
    var message = event.data;
    messagesList.innerHTML += '<li class="received"><span>Received:</span>' +
                             message + '</li>';
  };

  closeBtn.onclick = function(e) {
    e.preventDefault();

    // Close the WebSocket.
    socket.close();

    return false;
  };

  socket.onclose = function(event) {
    socketStatus.innerHTML = 'Disconnected from WebSocket.';
    socketStatus.className = 'closed';
  };
};

Что делает этот код:

 var socket = new WebSocket('ws://echo.websocket.org');

Что это за URL? Когда я захожу туда со своим браузером, его не существует, но это кажется важным, поскольку я не могу просто заменить этот URL случайными строками. Что оно делает? Является ли Websocket внешним API?

Я смотрю на вкладку сети и вижу это:

Request URL: ws://echo.websocket.org/
Request Method: GET
Status Code: 101 Web Socket Protocol Handshake

концептуально, что происходит? Зачем мне отправлять запрос на внешний сайт для использования Websockets?

1 Ответ

0 голосов
/ 01 мая 2018

echo.websocket.org предоставляет сервер webSocket, который позволяет вам подключиться к нему через webSocket, а затем просто возвращает вам все, что вы отправляете. Это в основном для тестирования и демонстрационных целей.

Код, который вы показываете, выглядит как демонстрационное / тестовое приложение, предназначенное для запуска на веб-странице браузера для подключения к webSocket, доступ к которому можно получить здесь: https://websocket.org/echo.html.

URL-адрес, начинающийся с ws://, указывает на соединение, которое намеревается использовать протокол webSocket.

Что делает этот код:

var socket = new WebSocket('ws://echo.websocket.org');

Он устанавливает соединение webSocket с сервером webSocket в echo.websocket.org.

Что это за URL?

Это URL-адрес webSocket, который указывает на намерение использовать протокол webSocket для подключения и связи с этим хостом. Это не то, что вы вводите в адресной строке браузера. Это то, что используется языком программирования (например, Javascript в вашем браузере).

Является ли Websocket внешним API?

Это протокол, который определяет средства подключения, схему безопасности, формат пакетных данных и т. Д. ... Можно сказать, что протокол http относится к протоколу webSocket, а английский - к японскому. Это разные способы общения. Спецификация для протокола webSocket находится здесь: https://tools.ietf.org/html/rfc6455.

Он также предназначен для того, чтобы хорошо вписаться в мир http / browser и дружить с инфраструктурой, которая изначально была разработана для http-запросов. Просто поиск «что такое websocket» в Google вызовет все виды описательных статей. Страница Википедии для webSocket предоставляет довольно хороший обзор.

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

В двух словах, оно разработано как долговременное непрерывное соединение (поддерживаемое во всех современных браузерах), которое позволяет клиенту подключаться к серверу, а затем поддерживать непрерывное соединение (потенциально) в течение длительного времени. Пока это соединение открыто, данные могут быть легко отправлены в обе стороны через webSocket. Основная причина, по которой люди его используют, это то, что они хотят, чтобы сервер мог своевременно отправлять данные непосредственно клиенту, не заставляя клиента постоянно спрашивать сервер снова и снова, есть ли у него какие-либо новые данные. Как только соединение webSocket установлено, сервер может в любое время просто «передать» данные клиенту.

Я смотрю на вкладку сети и вижу это. Концептуально, что происходит?

URL запроса: ws: //echo.websocket.org/

Метод запроса: ПОЛУЧИТЬ код состояния:

101 Web Socket Protocol Handshake

Это первые шаги для установления соединения webSocket. Вы можете увидеть более полное описание того, как работает это соединение, здесь: Как работает socket.io . В этом посте рассказывается о socket.io, который является еще одним слоем, построенным поверх webSocket, но основным протоколом является webSocket.

Зачем мне отправлять запрос на внешний сайт для использования Websockets?

Цель webSocket - подключить клиента к серверу (чтобы затем между ними можно было передавать данные), чтобы он использовался только при подключении к какому-либо серверу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...