首页客户案例企业网站建设外贸独立站SEO优化小程序+APP开发自媒体运营关于动态联系咨询

实现PHP的短连接

假如你去蛋糕店定做一个蛋糕,你会呆着看糕点师傅做完吗?正常都是先预订,然后去做别的事情,过一段时间再去取吧?或者蛋糕店有送货上门的服务,你定了蛋糕后留下地址它会给你送到。总之,正常人是不会呆着等的。那么我们给服务器发送一个数据让它“做蛋糕”为什么要等呢?糕点师被别人看着做事情当然会比平时自己完成的时候更有压力。服务器也一样,把请求留在服务器等服务器等待服务器也一样会感觉到压力。而且请求本身可以做别的事情,为什么非要吃饱撑着看别人做蛋糕呢?

为了不让客户端请求在服务器瞎等,我们就在程序中引入了短连接的概念。说到短连接,那和它相对的就是长连接,这在之前的文章中有说过,这是一种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方法基本都是“长”的,和这个短连接一起使用必定是喜剧啊。

日期:2015年04月14日

标签: 广州网站设计公司 、 广州网站设计 、 广州网站建设公司 、 广州网站建设 、 广州网站制作公司 、 广州网站制作 、 高端网站设计 、 高端网站建设 、 广州高端网站设计 、 广州高端网站建设

获取您的项目定制及优化报价。

* 为广州天河、白云、海珠、番禺、花都、南沙区提供网站建设服务。
微信二维码15876521776免费获取诊断报告