对于网站上的所有请求,您是否会看到使用单个websocket连接的显着加速?

时间:2011-12-13 21:20:52

标签: http websocket

想象一下,我正在建立一个普通的旧网站。不是游戏,不是聊天程序,不是普通网站。让我们说这是一个堆栈溢出克隆。

客户端只会向服务器端进行服务调用。服务器本质上是一个愚蠢的数据存储,永远不会发送HTML。客户端通过javascript处理所有模板。

如果我建立了一个单独的websocket连接并通过它完成了所有请求,我是否会看到执行ajax请求的显着加速?

使用单个连接的明显优势是它只需要建立一次。但实际上节省了多少时间?我知道建立TCP连接可能代价高昂,但在宏观方案中,这有关系吗?

2 个答案:

答案 0 :(得分:1)

我不推荐网页的websockets。 HTTP 1.1可以为多个请求重用TCP连接,只有HTTP 1.0必须为每个请求使用新的TCP连接。

SPDY可能是一个符合您要求的协议。请参阅SPDY: An experimental protocol for a faster web,但Chrome仅支持此功能。

如果使用websockets,则不会缓存请求。

答案 1 :(得分:1)

一个HTTP连接只能同时用于一个HTTP请求。假设一个页面请求了一个100Kb的文档,在该100Kb文档被传输之前,其他任何内容都不会从客户端发送到服务器。这称为head-of-line阻止。客户端可以与服务器建立额外的连接,但也有limit on the amount of concurrent connections具有相同的服务器。

开发SPDY及以后HTTP/2的主要原因之一是解决了这个问题。但是,对SPDY和HTTP / 2的支持还不像WebSocket那样普遍。 WebSocket可以提前到达,因为它支持multiple streams in full-duplex mode

一旦HTTP / 2得到更好的支持,它将成为解决此问题的首选解决方案,但WebSocket对于实时Web应用程序仍然会更好,因为服务器需要将数据推送到客户端。

查看N2O framework,它是为了解决我上面描述的问题而创建的。在N2O中,WebSocket用于发送与页面关联的所有资产。

使用WebSocket而不是标准HTTP请求可以获得多少速度,这在很大程度上取决于您的特定网站:它从服务器请求数据的频率,典型响应的大小等等。