假如你去蛋糕店定做一个蛋糕,你会呆着看糕点师傅做完吗?正常都是先预订,然后去做别的事情,过一段时间再去取吧?或者蛋糕店有送货上门的服务,你定了蛋糕后留下地址它会给你送到。总之,正常人是不会呆着等的。那么我们给服务器发送一个数据让它“做蛋糕”为什么要等呢?糕点师被别人看着做事情当然会比平时自己完成的时候更有压力。服务器也一样,把请求留在服务器等服务器等待服务器也一样会感觉到压力。而且请求本身可以做别的事情,为什么非要吃饱撑着看别人做蛋糕呢?
为了不让客户端请求在服务器瞎等,我们就在程序中引入了短连接的概念。说到短连接,那和它相对的就是长连接,这在之前的文章中有说过,这是一种Web通信技术。短连接也一样,通常是用做Web通信的。除了长连接和短连接之外,我们平时用的连接是不长不短的普通连接,在这里做下区分别搞混了。
通常PHP会把所有的代码都执行完才断开HTTP连接,这当然不行。如果PHP页面处理数据需要很长时间,我们当然要先把请求断开再处理数据。现在有一个PHP代码,执行需要5秒,5秒后会把用户发送过来的数据写入一个文件中。我们要在客户端的数据发送成功时马上断开,别让它等这5秒。
//突破PHP运行时限
set_time_limit(0);
//无视请求断开
ignore_user_abort();
//发送HTTP成功状态码
header('HTTP/1.1 200 OK');
//欺骗请求说“返回的数据是0字节”
header('Content-Length:0');
//威胁请求说“返回完成就自觉点断开”
header('Connection:Close');
//假装输出数据,让请求觉得数据已经输出了
flush();
//接下来是蛋糕师傅的工作了
sleep(5);//反正客户走了,先睡一觉
//醒来再做蛋糕
file_put_contents('Cake.txt',$_GET['data']);
看吧,我们使用了各种手段,软硬兼施才让请求自己断开的。不过这已经够了,这就是我们要的结果。但是这样的短连接也带来了一个问题,我想大家都感受到了,就是数据返回的问题。现在是不去傻傻的等糕点师做蛋糕了,但是蛋糕做完了总得拿吧?拿蛋糕又是一件麻烦的事情,不过现在都流行送货上门不是吗?为了避免悲剧的发生,我们要来创造戏剧。看看20世纪的美国搞笑喜剧片吧,喜剧演员总是一胖一瘦一高一矮成对出现的。这样的组合总是让人忍俊不禁。所以短连接最好的搭档就是长连接了,长连接的特长就是“送外卖”。由于它一直和客户端保持通信,所以只要服务器做完“蛋糕”就可以委托长连接给短连接留下的地址(就是回调函数或者业务ID什么的)送去。这样,就可以构造一个很不错的“蛋糕式Web通信系统”。
这篇文章要说的就是这么多,上面提到的长连接其实换成其它Comet方法也可以,比如长轮询什么的。反正Comet方法基本都是“长”的,和这个短连接一起使用必定是喜剧啊。
文章题目:实现PHP的短连接
网站网址:https://www.cdcxhl.com/news8/309458.html
成都网站建设公司_创新互联,为您提供面包屑导航、外贸网站建设、网站营销、定制网站、企业建站、软件开发
广告
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源:
创新互联