当前位置:首页 > 后端 > 正文内容

关于PHP的长连接

Z先生9年前 (2016-03-25)后端12513

核心函数:

ignore_user_abort();//浏览器关闭,脚本还是运行,测试OK
set_time_limit(0);
sleep(2);


代码片段(后台):

	public function xinda() {
		//ignore_user_abort();
		set_time_limit(0);
		header("Connection: Keep-Alive");
		header("Proxy-Connection: Keep-Alive");
		echo str_pad('', 4096);
		ob_implicit_flush(true);
		while ($i <= 10) {
			$i++;
			clearstatcache();
			//要制定的代码,以及输出
			ob_flush();
			flush();
			sleep(2);
		}
	}


前端:

function xinda() {
	setTimeout(function() {
		$.getScript("?m=index&a=xinda");
	}, 5000);
}

前端和短连接最大的区别是执行一次,其他的都是服务器执行。减少客户端的请求量。

尝试过AJAX,30秒请求一次服务器,长期开着,十分消耗资源。1%的几率请求500错误。


遇到的问题:

1、Apache Win32环境下,进程会锁死(但是重新开页面,则不影响),Linux+Apache未测试。

2、关于flush();输出,如果WEB服务器启用gzip则是无效的,所以必须把WEB服务的GZIP关掉。

3、如果要执行的代码操作数据库,那么要考虑数据库的长连接问题。

4、ignore_user_abort();函数,浏览器关闭,脚本还是继续运行,测试OK的,用来执行计划任务不错。


但是以上都不是最佳的解决方案,最佳的解决方案使用:workerman,做聊天室/IM软件什么的,都杠杠的。

    

标签: php长连接
分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。