Websocket连接。我们为什么要打电话到ws://echo.websocket.org?

Websocket连接。我们为什么要打电话到ws://echo.websocket.org?,websocket,Websocket,我正在编写一些websocket代码,到目前为止,我有以下几点: window.onload = function() { // Get references to elements on the page. var form = document.getElementById('message-form'); var messageField = document.getElementById('message'); var messagesList = document.g

我正在编写一些websocket代码,到目前为止,我有以下几点:

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';
  };
};
那是什么网址?当我用我的浏览器访问那里时,它并不存在,但它似乎很重要,因为我不能简单地用随机字符串替换url。它有什么作用?Websocket是外部API吗

我正在查看“网络”选项卡,看到以下内容:

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

从概念上讲,发生了什么?为什么我需要向外部站点发出使用websocket的请求?

提供了一个websocket服务器,允许您与它建立websocket连接,然后它将您发送的任何内容回显给您。它主要用于测试和演示目的

您显示的代码看起来像是一个演示/测试应用程序,设计用于在浏览器网页中运行webSocket连接,您可以在此处访问类似的内容:

ws://
开头的URL表示打算使用webSocket协议的连接

此代码的作用是:

它正在与位于
echo.webSocket.org
的webSocket服务器建立webSocket连接

那是什么网址

这是一个webSocket URL,指示使用webSocket协议连接和与该主机对话的意图。这不是您在浏览器的URL栏中键入的内容。它是编程语言(比如浏览器中的Javascript)使用的东西

Websocket是外部API吗

它是一种协议,指定了连接方式、安全方案、数据包格式等。。。您可以说http协议与webSocket协议的关系就像英语与日语的关系一样。它们是不同的交流方式。webSocket协议的规范如下所示:

它还可以很好地适应http/浏览器世界,并与最初为http请求设计的基础结构友好。只要在谷歌上搜索“what is websocket”,就会出现各种各样的描述性文章。提供了一个非常好的概述

关于webSocket协议是什么以及它的用途,web上已经有很多文章了,所以我在这里不再重复了。您可以看到关于webSocket客户端的教程和关于webSocket服务器的教程

简言之,它被设计成一种持久、连续的连接(在所有现代浏览器中都支持),允许客户端连接到服务器,然后(可能)长时间地保持连续连接。当该连接打开时,可以通过webSocket轻松地双向发送数据。人们使用它的主要原因是,他们希望服务器能够及时地直接向客户机发送数据,而不需要客户机不断地反复询问服务器是否有任何新数据。一旦建立了webSocket连接,服务器就可以随时将数据“推送”到客户端

我正在查看网络选项卡,我看到了这个。从概念上讲,发生了什么

请求URL:ws://echo.websocket.org/

请求方法:获取状态代码:

101 Web套接字协议握手

这些是建立webSocket连接的第一步。您可以在此处看到该连接工作方式的更完整描述:。这篇文章讨论了socket.io,它是构建在webSocket之上的另一层,但底层协议是webSocket

为什么我需要向外部站点发出使用WebSocket的请求

webSocket的用途是将客户机连接到服务器(这样就可以在它们之间发送数据),因此它只能在连接到某个服务器时使用

Request URL: ws://echo.websocket.org/
Request Method: GET
Status Code: 101 Web Socket Protocol Handshake
var socket = new WebSocket('ws://echo.websocket.org');