WebSockets现在绝对是未来。
长轮询是一种肮脏的解决方法,可以防止像AJAX那样为每个请求创建连接 - 但是长轮询是在WebSockets不存在时创建的。现在由于WebSockets,长时间的轮询不再消失。
WebRTC允许点对点通信。
我建议学习WebSockets。
比较:
网络上不同的通信技术
-
阿贾克斯 - → .创建与服务器的连接,发送包含可选数据的请求标头,从服务器获取响应,然后关闭连接。在所有主流浏览器中均受支持。request
response
-
长民意调查 - → → .像 AJAX 一样创建与服务器的连接,但保持活动状态连接打开一段时间(虽然不会太长)。在连接期间,打开的客户端可以从服务器接收数据。由于超时或数据 eof,客户端必须在连接关闭后定期重新连接。在服务器端,它仍然被视为HTTP请求,与AJAX相同,只是请求应答将在现在或将来的某个时候发生,由应用程序逻辑定义。支持图表(完整)|维基百科request
wait
response
-
网络袜子 - ↔ .创建与服务器的 TCP 连接,并根据需要将其保持打开状态。服务器或客户端可以轻松关闭连接。客户端经历与 HTTP 兼容的握手过程。如果成功,则服务器和客户端可以随时双向交换数据。如果应用程序需要以两种方式频繁地交换数据,则此方法非常有效。WebSockets确实具有数据框架,其中包括从客户端发送到服务器的每条消息的屏蔽,因此数据只是加密。支持图表(很好)|维基百科client
server
-
WebRTC - ↔ .传输用于在客户端之间建立通信,并且与传输无关,因此它可以使用UDP,TCP甚至更抽象的层。这通常用于大容量数据传输,例如视频/音频流,其中可靠性是次要的,并且可以牺牲几帧或质量进度的降低,以支持响应时间,至少是一些数据传输。双方(对等方)可以独立地将数据推送给对方。虽然它可以完全独立于任何集中式服务器使用,但它仍然需要某种交换端点数据的方法,在大多数情况下,开发人员仍然使用集中式服务器来“链接”对等体。这仅用于交换用于建立连接的基本数据,之后不需要集中式服务器。支持图表(中)|维基百科peer
peer
-
服务器发送的事件 - ← 。客户端与服务器建立持久和长期的连接。只有服务器可以向客户端发送数据。如果客户端想要将数据发送到服务器,则需要使用其他技术/协议来执行此操作。此协议与 HTTP 兼容,并且易于在大多数服务器端平台中实现。这是一种更可取的协议,用于代替长轮询。支持图表(良好,IE 除外)|维基百科client
server
优势:
WebSockets服务器端的主要优点是它不是HTTP请求(握手后),而是基于消息的正确通信协议。这使您能够获得巨大的性能和架构优势。例如,在 node.js 中,您可以为不同的套接字连接共享相同的内存,以便它们各自可以访问共享变量。因此,您不需要使用数据库作为中间的交换点(如AJAX或使用PHP等语言的长轮询)。您可以将数据存储在RAM中,甚至可以立即在套接字之间重新发布。
安全注意事项
人们经常担心WebSockets的安全性。现实情况是,它几乎没有什么区别,甚至将WebSockets作为更好的选择。首先,使用AJAX,MITM的可能性更高,因为每个请求都是通过互联网基础设施遍历的新TCP连接。使用WebSockets,一旦连接,在两者之间进行拦截就更具挑战性,当数据从客户端流式传输到服务器时,还会额外强制执行帧屏蔽,以及额外的压缩,这需要更多的努力来探测数据。所有现代协议都支持:HTTP和HTTPS(加密)。
附言
请记住,WebSockets通常具有非常不同的网络逻辑方法,更像是实时游戏一直以来,而不是像http。