我正在为朋友构建一个小型聊天应用程序,但不确定如何及时获取信息,而不是像强制刷新页面那样手动或基本。

目前,我正在使用简单的AJAX实现这一点,但这有一个缺点,即在短计时器过去时定期撞击服务器。

在研究长/短轮询时,我遇到了HTML5 WebSockets。这似乎很容易实现,但我不确定是否有一些隐藏的缺点。例如,我认为只有某些浏览器支持WebSockets。WebSockets还有其他我应该注意的缺点吗?

既然这两种技术做的是同样的事情,那么在什么样的场景下人们会更喜欢使用其中一种而不是另一种呢?更具体地说,HTML5 WebSockets使AJAX长/短轮询过时了吗,或者有令人信服的理由更喜欢AJAX而不是WebSockets吗?

看起来很容易添加自定义HTTP头到你的websocket客户端与任何HTTP头客户端支持这一点,但我不知道如何与web平台的websocket API。

有人知道怎么做到吗?

var ws = new WebSocket("ws://example.com/service");

具体来说,我需要能够发送HTTP授权标头。

我正在学习HTTP/2协议。它是一种带有小消息帧的二进制协议。它允许在单个TCP连接上进行流多路复用。从概念上看,它与WebSockets非常相似。

有没有计划淘汰websockets,代之以某种无头HTTP/2请求和服务器发起的推送消息?或者WebSockets将补充HTTP/2?

有很多关于WebSocket和HTTP的博客和讨论,很多开发者和网站都强烈提倡WebSocket,但我仍然不明白为什么。

例如(WebSocket爱好者的参数):

HTML5 Web Sockets代表了Web通信的下一次发展——通过Web上的单个套接字操作的全双工双向通信通道。——websocket.org

HTTP支持流:请求正文流(你在上传大文件时使用它)和响应正文流。

在与WebSocket连接期间,客户端和服务器每帧交换数据,每帧交换数据2字节,而当您进行连续轮询时,HTTP报头的交换数据为8千字节。

为什么这2个字节不包括TCP和TCP协议开销?

GET /about.html HTTP/1.1
Host: example.org

这是约48字节的HTTP报头。

HTTP分块编码-分块传输编码:

23
This is the data in the first chunk
1A
and this is the second one
3
con
8
sequence
0

因此,每个块的开销并不大。

此外,这两种协议都在TCP上工作,因此所有与长时间连接有关的TCP问题仍然存在。

问题:

为什么WebSockets协议更好? 为什么实现它而不是更新HTTP协议?

目前有大量的node.js websocket库,最流行的似乎是:

https://github.com/Worlize/WebSocket-Node https://github.com/einaros/ws https://github.com/LearnBoost/engine.io https://github.com/learnboost/socket.io https://github.com/sockjs

然而,我找不到任何可靠的具体比较… 显然插座。IO是很棒的,但已经变得相当过时,并有失败的构建。ws和websocket-node都声称它们是最快的。和引擎。IO看起来很新,但比较轻的aletartives要重得多。

如果我们或者其他人能够给出一个答案,作为使用哪个套接字库以及何时使用的指南,以及它们之间的比较,那将是令人惊讶的。

插座之间有什么区别。IO和websockets在 node . js ? 它们都是服务器推送技术吗? 我觉得唯一的不同是,

套接字。IO允许我通过指定事件名称来发送/发出消息。 对于socket。io消息从服务器将到达所有客户端,但同样在websockets,我被迫保持一个数组的所有连接和循环通过它发送消息到所有客户端。

同时, 我想知道为什么网络检查员(如Chrome/firebug/fiddler)无法从服务器捕捉这些消息(从socket.io/websocket) ?

请澄清这一点。

WebSockets和Server-Sent Events都能够将数据推送到浏览器。在我看来,它们似乎是相互竞争的技术。它们之间的区别是什么?什么时候你会选择一个而不是另一个?

我试着读了一些文章,但我对概念还不是很清楚。

有没有人能给我解释一下这些技术是什么

长轮询 服务器发送的事件 尚 彗星

我每次遇到的一件事是,服务器保持一个连接打开,并将数据推送到客户端。连接如何保持打开状态,客户端如何获得推送的数据?(客户端如何使用数据,也许一些代码会有所帮助?)

现在,我应该使用其中的一个实时应用程序。我已经听到了很多关于websockets(与socket。io[一个node.js库]),但为什么不是PHP?