当前位置: 首页 > 工具软件 > icomet > 使用案例 >

使用icomet 实现长轮询(续)

孟浩然
2023-12-01

1. 引入 icomet.js

这里点击下载: https://github.com/ideawu/icomet


2. 引入相关的详细配置


var app_host = '你的服务器域名或ip',
    icomet_host = '你所配置icomet服务器所在的域名或ip';

var comet = new iComet({
	channel: 'abc',        //推送消息的频道 作为自己的唯一标识 即 cname 的别名
	sign_url: 'http://'+app_host+'你的接口注册地址', //注册 服务器 否则不会对该客户端 推送消息
	sub_url: 'http://'+icomet_host+':8100/sub',  //请求 icomet服务器 与程序无关
	pub_url: 'http://'+app_host+'你的接口发送地址', //推送消息 给服务器
	sub_timeout: 60*1000, //请求 注册 响应超时 重连间隔时间
	callback: function(msg){//回调函数
	    //主动接收回调消息
	}
});

//推送消息
comet.pub('你要发送的消息内容',function(msg){
	console.log(msg);
});

//停止所有服务器推送或接收请求
comet.stop();

3. 编写服务端的 注册接口 和 发送消息接口

(1) 注册接口

//这里用 cookie 或者 session 或者  memcache 存储当前用户cname
$cb = urlencode($_GET['cb']);
$cname = urlencode($_GET['cname']);

$_COOKIE['cname'] = $cname

$url = "http://127.0.0.1:8000/sign?cname=$cname&cb=$cb";
$resp = http_get($url);
echo $resp;

function http_get($url){
	$ch = curl_init($url) ;
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ;
	$result = curl_exec($ch) ;
	curl_close($ch) ;
	return $result;
}



(2) 消息推送接口


if(get_magic_quotes_gpc()){
	$_GET['content'] = stripslashes($_GET['content']);
}
$cname = trim($_GET['cname']);
$content = trim($_GET['content']);

if($_COOKIE['cname'] == $cname){
    //检验当前登陆是否是本人
}

echo icomet_push($cname, $content);

function icomet_push($cname, $content){
	$cname = urlencode($cname);
	$content = urlencode($content);
	$url = "http://127.0.0.1:8000/push?cname=$cname&content=$content";

	$ch = curl_init($url) ;
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ;
	$result = @curl_exec($ch) ;
	curl_close($ch) ;
	return $result;
}








 类似资料: