2

这似乎是一个奇怪的问题,但我真的很困惑,因为当从 Tornado 下载这个示例时,我认为:好的,我运行它,它会工作!但问题是,它没有工作,因为我在离线模式下进行了测试,并且缓存中没有 jQuery!

并从 SO中找到了这个:

Ajax - 创建到服务器的连接发送一些数据(简化为 get/post),并接收响应。

长轮询 - 创建与服务器的连接,发送一些数据,保持连接并有时从服务器接收一些数据。连接保持短时间,并定期重新连接。在服务器端它仍然像网页一样处理。

WebSockets - 创建到服务器的连接,并根据需要保持。服务器或客户端可以轻松地阻止它。双向发送数据。WebSockets 通常对每条消息使用掩码,因此数据被简单地加密。

那么,为什么即使它与服务器端相关,引擎盖下总是有 Javascript 呢?

4

2 回答 2

4

JavaScript 仅在浏览器中对 WebSocket 很重要,因为浏览器已经在 J​​avaScript 中实现了 WebSocket API(参见 RFC 6455)。因此,如果您想从 HTML5 页面中访问 WebSocket,您需要编写 JavaScript。但是,您也可以使用 Java Applet 在 Java 客户端中执行 WebSocket。(尽管小程序已经失宠。)此外,可以从本地应用程序(包括移动 iOS)执行 WebSocket。

许多 WebSocket 服务器平台尝试支持多种类型的客户端。例如,Kaazing 不仅提供 JavaScript 客户端,还提供 .NET、Silverlight、Java 和 Objective-C 客户端。WebSocket 的基本思想是您只需编写一次服务器逻辑,然后您就可以“收获”您在各种不同客户端中所做的事情。

请记住,如果您要使用 WebSocket,您将需要一种编程语言而不是基本的 HTML 标记,因为您需要处理通过 WebSocket 连接传入的数据。这些数据可以来自许多不同的协议,例如 AMQP、STOMP、socket.IO、WAMP 和许多其他协议。对于每种类型的协议,您实际上都需要一个不同的库来处理协议的处理。

于 2012-12-03T20:17:37.313 回答
3

Javascript 最初是作为一种向网页添加客户端表单验证和少量动态用户交互的方式。然而,现代 Javascript 是一种非常强大的语言(也有很多烦恼),它可以在浏览器或服务器上运行(使用类似Node.js的东西)。现代浏览器提供了许多仅适用于 Javascript 的 API(除非并且直到其他语言如 Dart 得到普遍支持),例如 Web Workers、Canvas、Web GL、Web Audio API、XMLHTTPRequest(即 AJAX)、计时器、事件等。

浏览器的旧概念是能够下载和呈现静态 HTML 标记文档的程序。现在将浏览器视为主要用于执行 Web 应用程序的操作系统 + 库 + API 更为有用。换句话说,现代网络浏览器的主要目的是执行 Javascript 并为 Javascript 提供 API。HTML 的主要目的是指定要加载的初始 Javascript 文件以启动 Web 应用程序。HTML 和 CSS 也可用于定义 DOM 树的初始状态(Javascript API 的可见部分)。但是,您可以使用 HTML 和 CSS 静态指定的所有内容,也可以使用 Javascript 动态生成。

在这种情况下,WebSockets 是浏览器中的一种 API,它使 Web 应用程序(即在浏览器中运行的 Javascript 程序)能够与 WebSocket 服务器建立低延迟的双向通信通道。

更新

他们为什么不直接说“WebSockets 在 Javascript 版本 xxx 中可用”?

  1. Javascript 不仅适用于 Web(例如 Node.js),而且这些 API 也不仅仅适用于 Javascript。例如,如果你有一个启用了 Dart 的 Chrome 版本,那么这些相同的 API 可以从 Dart 中获得。script 标签允许使用其他语言,因此未来的浏览器可能会运行可以访问这些 API 的其他语言。
  2. Javascript 是由ECMA定义的语言,WebSockets、Web Workers 等是由W3C定义为 HTML5 的一部分的浏览器 API。浏览器版本决定了哪些 Web API 可用以及 Javascript 的版本。您的浏览器可能使用支持新 API 的旧版 Javascript,反之亦然。
于 2012-12-03T15:54:04.850 回答