首先-我了解SPDY和Websockets不是一回事,并且可以像通过HTTP一样在SPDY上运行Websockets。

但是-我想知道SPDY是否可以替代websockets,如果我试图提供一种REST(如)API,该API也支持服务器推送(通过同一连接的双向调用)。

我当前的原型(prototype)使用websockets(node + socket.io),并且运行良好。但是,我与websockets有关的问题是我必须梦见自己的JSON协议(protocol),以便将请求路由到服务器和从服务器路由。我宁愿在请求中使用REST样式的URI和 header ,这更适合基于REST的体系结构。 SPDY似乎会更好地支持这一点。

另外,由于缺少标题,我担心websockets不太适合我们的部署网络,并且认为SPDY会再次适合。

但是,除了将文件推送到浏览器之外,我还没有看到很多双向SPDY请求的示例。我想将事件和数据推送到浏览器,例如:

Content-Type: application/json
{
   "id": "ca823f3e233233",
   "name": "Greg Brady"
}

但是我还不清楚浏览器/ Javascript如何“监听”并对此使用react,就像使用WebSocket和socket.io API一样。

最佳答案

让我们从头开始:为什么要通过SPDY运行WebSocket,而不是进行HTTP升级?如果将HTTP连接升级到WS,则其他任何东西都不能使用该TCP流-WS连接可以是空闲的,但是连接仍然被阻止。使用SPDY,您可以在同一基础TCP流上混合多个请求/响应以及一个Websocket连接(甚至多个)。实际上,截至2012年7月,WS over SPDY仍在开发中,因此您将不得不等待对WebSocket使用SPDY-希望时间不会太长!

但是,让我们假设那里有支持。。。尚不清楚如何从JavaScript监听“SPDY Push”的原因是因为没有办法!推送的资源进入您的浏览器缓存-仅此而已。如果您需要将数据流传输到javascript回调中,那么WebSockets或服务器发送事件(SSE)就是答案。

因此,将它们放在一起:

  • HTTP为单个小请求( header 等)增加了很多开销
  • WebSockets为您提供了一个低开销的通道,但是需要您实现自己的路由
  • SPDY将大大减少小型HTTP请求(成功)的开销和成本
  • SSE是将数据推送到客户端(今天可以通过SPDY运行)的一种很好的简单替代方法。

    您可以使用SPDY + SSE来实现您的目标,并且所有这些通信都可以在同一TCP通道上运行。 SPDY向服务器请求,SSE从服务器推送。

    关于websocket - SPDY替代Websockets?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12103628/

  • 10-11 06:56