2017-09-21 82 views
1

我目前正在考虑在我的应用程序中实现websockets的选项。但在这样做之前,我想确保我正确理解它是如何工作的,以及它是否值得。浏览器如何使用WebSockets处理DNS查找和TLS?

我了解基础知识:通过WebSockets握手只能通过HTTP进行一次,然后与服务器交谈以切换到较低级别的TCP层,此时,我们之间有一个全双工通道服务器和客户端。

目前我测量我的服务器进行的Ajax请求(这是很多),我有这样的信息:

Ajax request time

的“DNS查找”,“初始连接”和“ SSL“时代是我想要消除(如果可能)

为了我的理解,这些时间是握手过程的一部分,我假设使用websockets它只会在开始时(握手)发生,但我不确定。

所以我的问题是:对吗?实现WebSockets将确保“DNS查找”和“初始连接”步骤仅在握手时发生?

预先感谢您的帮助,对不起,如果我的理解是错误的。

+1

WebSocket使用持久的TCP连接,所以是的,这些操作只在新连接开始时执行。 –

回答

2

我了解基本知识:通过WebSockets握手只会通过HTTP进行一次,然后会与服务器通信以切换到较低级别的TCP层,此时,我们拥有一个全双工服务器和客户端之间的通道。

它不会切换到较低级别的TCP层。相反,它会将协议从简单的HTTP(请求,响应)切换到基于消息的协议 - 就像HTTP在应用层上的TCP之上而不是在较低级别上一样。这只是同一级别上的不同协议。它的行为有点像TCP,因为您可以随时发送和接收消息,而不受HTTP的请求/响应方案的限制。但是例如TCP是一个数据流,而WebSockets实现了一个面向消息的协议。

而且,DNS是的WebSockets之外。 DNS只需要查找IP地址来建立TCP连接,然后用它来完成协议切换到WebSocket之前所需的初始HTTP握手。

的情况与TLS相似。在DNS查找获得IP地址后,建立TCP连接,然后建立TCP连接顶部的TLS会话,然后完成切换到WebSockets之前的初始HTTP握手:即TCP内的TLS隧道内的HTTP连接 - 换句话说HTTPS。 WebSocket协议然后也在这个TLS隧道内部讲,类似于HTTP如何完成。

所以我的问题是:我是不是正确的?实现WebSockets将确保“DNS查找”和“初始连接”步骤仅在握手时发生?

正确。在每个ws://连接的开始处,如果名称的IP尚未被缓存,则可能会进行DNS查找。你将有一个TCP握手,你将有一个HTTP握手,然后导致协议切换。每个ws://连接都是如此。而对于wss://,还建立了TCP连接建立之后和HTTP握手开始之前的TLS隧道。

+0

感谢您的详细解释 –