Javascript 为什么我们需要web套接字?

Javascript 为什么我们需要web套接字?,javascript,websocket,Javascript,Websocket,这更像是一个n00b问题,但我从未真正知道答案 那么为什么我们需要websockets协议呢 而且,与comet样式/长轮询/挂起获取样式相比,HTTP有哪些优势?comet和Ajax都可以提供最终用户体验,提供类似桌面的功能和较低的用户感知延迟,只有Web套接字能够实现提供本机方法的承诺,以便以可忽略不计的延迟准确、高效地向浏览器发送和从浏览器发送事件 通过轮询,它会发出不必要的请求,因此,在低消息速率情况下,许多连接会被不必要地打开和关闭。(与轮询一样,它会定期发送HTTP请求,并立即收到响

这更像是一个n00b问题,但我从未真正知道答案

那么为什么我们需要websockets协议呢


而且,与comet样式/长轮询/挂起获取样式相比,HTTP有哪些优势?

comet和Ajax都可以提供最终用户体验,提供类似桌面的功能和较低的用户感知延迟,只有Web套接字能够实现提供本机方法的承诺,以便以可忽略不计的延迟准确、高效地向浏览器发送和从浏览器发送事件

通过轮询,它会发出不必要的请求,因此,在低消息速率情况下,许多连接会被不必要地打开和关闭。(与轮询一样,它会定期发送HTTP请求,并立即收到响应。)


Web套接字消除了开销并显著降低了复杂性。

目前还不清楚我们是否需要它们。在将事件推送到客户机的场景中,一个页面可以使普通的AJAX GET请求循环,服务器可以“挂起”直到事件可用。经过一些超时之后,服务器可以返回“无事件”响应,以便客户端重新连接。在连接打开且客户端等待响应的期间,有一个从服务器返回到客户端的有效推送通道

可以调整超时时间以减少不必要的重新连接,尽管它通常不能是无限的,因为如果服务器端进程挂起的时间过长,大多数服务器框架都会终止它


考虑到这种现有能力,问题是:一个新的通信框架是否真的比已经可以做的事情增加了显著的价值?它不会真正实现一些无法完成的事情。这只会稍微改善它。

这里有一篇关于websocket.org上过度轮询的文章

1-websocket是一种自然的全双工, 双向,单插座连接。使用WebSocket,您的HTTP请求将成为 打开WebSocket连接并重用同一连接的单个请求 从客户端到服务器,从服务器到客户端

2-WebSocket减少了延迟。比如,不像民调,, WebSocket发出一个请求。服务器不需要等待来自的请求 客户。类似地,客户机可以随时向服务器发送消息。这首单曲 请求大大减少了轮询的延迟,轮询以一定的间隔发送请求,而不考虑 消息是否可用

3-WebSocket使实时通信更加高效。 您始终可以通过HTTP使用轮询(有时甚至流)来接收数据 HTTP上的通知。然而,WebSocket节省了带宽、CPU功率和延迟。 WebSocket是性能方面的创新

4-WebSocket是一种底层网络协议,使您能够构建其他标准 最重要的是协议

5-WebSocket是为HTML5应用程序提供高级功能的一部分 以与其他平台竞争


6-WebSocket是关于简单性的

您将如何使用
XmlHttpRequest
实现类似BitTorrent客户端或VNC客户端的功能?您将通过在HTTP上编写类似协议来实现“类似”它们。开个玩笑,我曾经在HTTP上做过一个套接字隧道代理,其中一方将数据发布到web应用程序,另一方将读取数据并将其传送,从而根据大量单独的HTTP事务模拟流。令我惊讶的是,它实际上可以作为Microsoft远程桌面会话的管道。任何现有的协议都可以这样模仿。你为什么要这么做是另一个问题。速度和简单。AJAX循环中的GET请求是一种丑陋而缓慢的攻击,它提供的东西与WebSocket干净而优雅地提供的东西相同。是的,请。@Lathargy你的评论使上面所有的技术谈话都有意义。。。谢谢:)那么为什么不像HTTP那样常用呢?