了解最新公司动态及行业资讯
这种方法接近实时,但不是真正的实时。(当然,一些外部因素总是失控的,比如网络延迟,任何方法都会出现。)
3. 流式传输
流通道( )与长轮询大致相同,只是服务器不关闭响应流。相反,它故意保持打开状态,让浏览器认为更多数据即将到来。但是,流通道也有其自身的缺点:
最大的问题是数据刷新()。
如果发现套接字将长时间打开,某些浏览器实现可能会自行决定关闭套接字。在这种情况下,需要重新建立通道。
通常,第一个问题是通过将垃圾负载附加到每个流响应来解决的,这样响应数据就足以填满缓冲区。第二个问题可能会诱使浏览器认为数据以较慢的速度进入,并定期显示“保持活动”或“同步”消息。
以下是实现推送的一些常用技术。
1. 彗星
Comet 有时也称为反向 Ajax 或服务器端推送(-side push)。这个想法很简单:将数据直接从服务器推送到浏览器,而不是等待浏览器请求它。这听起来很简单服务器运维技术,但是如果您熟悉 Web 应用程序,尤其是 HTTP 协议,那么您就会知道它绝非简单。实现 Comet 风格的 Web 应用程序同时保持跨浏览器和服务器的可伸缩性仅在最近几年才成为可能。
因为,要使用 Comet,您需要做两件主要的事情。首先,需要对配置文件 .xml 稍作修改。默认启用更典型的同步 IO 连接器。现在只需将其切换到异步版本,如下所示。
然后,创建一个实现 org... 接口的接口。该接口需要实现事件方法。这是 Comet 交互的生命周期方法。将使用不同的实例调用。通过检查,可以确定处于生命周期的哪个阶段。BEGIN事件发生在请求第一次进来的时候。READ 事件表示正在发送数据,并且仅在请求为 POST 时才需要。当遇到 END 或 ERROR 事件时,请求将终止。
具体例子可以参考这个地址。
常用的 Comet 框架有:
: 是一个 Dojo 项目,提供 Java、perl 和其他语言的实现。该站点还提供由 Sun、IBM 和 BEA 等公司实施的 Comet 产品的链接。
2. HTML5
HTML5 提供了两种符合 W3C 的推送方法:SSE 和 Web。
我们先介绍SSE(-sent-),以PHP服务器为例,
客户访问的页面是
sse.htm
服务器端推送消息的脚本是
.php
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
mysql_connect("localhost", "user", "pass");
mysql_select_db("eventstream");
$q = mysql_query("select textnotif from notification where read='0'");
$r = mysql_fetch_array($q);
$notif = $r[textnotif];
if($notif != ""){
echo "data: ".$notif.PHP_EOL;
}
SSE 实现了从服务器向客户端单向推送消息的功能。目前所有浏览器都可以支持。对于支持的特定浏览器,您可以单击此处。
WEB提供双向消息通道。它经过 HTTP 协议的初始握手阶段服务器运维技术,然后升级到 Web 协议以支持实时数据通信。该协议旨在更轻量级。
这是一个使用该技术的示例的参考。目前,互联网上的内容仍然很多。
由于双向通信的优势,可用于聊天室、游戏、股票交易等需要双向通信的应用。SSE虽然只能实现从服务端到客户端的单向推送,但是可以自动重链接等优点,所以也很有用。
另一个可以作为参考的轻量级服务器推送框架是它提供了从HTTP Push到DHTML,以及该框架的具体实现示例。
参考:
1.使用 Java 实现 Comet 风格的 Web 应用程序
2.应用HTML5实现数据交换
3.