服务器推送初探

服务器推送,Comet,反向Ajax,多种名字,捯饬起来也是相当费劲。

先来看服务端:

w3cSchool有个简单的例子,http://www.w3school.com.cn/html5/html_5_serversentevents.asp。

对于php,有几点需要注意:

1)设置header,

header(‘Content-Type: text/event-stream‘);

若不设置,会报错的。

2)在echo信息的时候,如果字符串过短,会不输出

最好先输出一堆空格:

str_repeat(‘ ‘, 4000)

3)echo信息以\n\n或者\r\n\r\n结束。

4)echo信息以data:开头

5)强制信息输出

flush();

//若使用ob_start(),还需要ob_flush()

一般来说都会操作数据库,数据库有新信息时就会推动到客户端,然后再其置为已读。

下面是我的代码:

<?php

header(‘Content-Type: text/event-stream‘);
header(‘Cache-Control: no-cache‘);

$db = new mysqli(‘localhost‘, ‘root‘, ‘111111‘, ‘table‘);
$db->query(‘set names utf8‘);

set_time_limit(0);
ob_start();

while (1) {
        $query = ‘select * from alarms where username = "test12" and is_alarmed = "0"‘;
        $result = $db->query($query);
        $row = $result->fetch_assoc();
        if(!empty($row)) {
            echo ‘data: ‘.str_repeat(‘ ‘, 4000).json_encode($row);
            echo "\n\n";
            ob_flush();
            flush();

            $sql = ‘update alarms set is_alarmed = "1" where alarm_id = "‘.$row[‘alarm_id‘].‘"‘;
            $db->query($sql);
        }

        sleep(1);
}

?>

客户端的话,使用比较新的EventSource实现,比较简单

        var ticker = new EventSource(‘server.php‘);

        ticker.onmessage = function(e) {
            var data = JSON.parse(e.data);
       console.log(data);

        }

这个还比较新,网上资料比较少,还是有问题没有解决。继续更新。。。。

参考:

HTML 5 服务器发送事件

EventSource

使用服务器发送事件

Html5实践之EventSource

时间: 2024-11-03 15:08:22

服务器推送初探的相关文章

Spring之WebSocket网页聊天以及服务器推送

Spring之WebSocket网页聊天以及服务器推送 转自:http://www.xdemo.org/spring-websocket-comet/ /Springframework /Spring之WebSocket网页聊天以及服务器推送 1. WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 2. 轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端

ASP.NET Web实时消息后台服务器推送技术---GoEasy

越来越多的项目需要用到实时消息的推送与接收,怎样用ASP.NET现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过

Python Web实时消息后台服务器推送技术---GoEasy

越来越多的项目需要用到实时消息的推送与接收,怎样用Python现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过R

Ruby Web实时消息后台服务器推送技术---GoEasy

越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Res

C# Web实时消息后台服务器推送技术---GoEasy

越来越多的项目需要用到实时消息的推送与接收,怎样用C#现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Restf

node.js Web实时消息后台服务器推送技术---GoEasy

越来越多的项目需要用到实时消息的推送与接收,怎样用node.js实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等. 支持不同的开发语言:    GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通

rsync内网服务器 推送和拉取公网代码配置

一.    在 web(web安装rsync就行不需要配置rsyncd.conf) .web_bak 安装 rsync(web在/var/www/html/下更新信息,在wen_bak的/var/www/html/下跟着更新所有数据) IP:192.168.1.80是源服务器就是服务端(yum安装rsync就行,不需要配置),192.168.1.81是目的服务器就是客户端(yum安装rsync,还要配置/etc/rsyncd.conf). [[email protected] ~]# yum -

基于Tomcat7、Java、WebSocket的服务器推送聊天室 (转)

前言 HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用.以前 的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高.WebSocket技术对 只会产生很小的开销,并且实时性特别高.下面就开始讲解如何利用WebSocket技术开发聊天室.在这个实例中,采用的是Tomcat7服务器,每个服 务器对于WebSocket的实现都是不一样的

服务器推送的实现—基于EventSource

一.服务器推送理解 首先要知道为什么使用服务器推送,回答这个问题其实就是相当于回答,服务器推送的优点,可以从两个方面来思考: 1.1 服务器推送的目的 及时的将客户端感兴趣的数据推送给它. 1.2 不是用服务器推送怎么来实现需求 不使用服务端推送,那就只能由客户端定期对服务器发送请求,来获取是否有需要的数据.这样做有几个缺点: 不能及时的获取,最大延时时间为轮询间隔. 浪费资源,大部分的请求,都不会得到数据 轮询间隔短会对服务器造成较大的压力. 1.3 使用服务器推送可以带来什么好处 我理解的有