假如你去蛋糕店定做一個蛋糕,你會呆著看糕點師傅做完嗎?正常都是先預(yù)訂,然后去做別的事情,過一段時間再去取吧?或者蛋糕店有送貨上門的服務(wù),你定了蛋糕后留下地址它會給你送到??傊H耸遣粫糁鹊?。那么我們給服務(wù)器發(fā)送一個數(shù)據(jù)讓它“做蛋糕”為什么要等呢?糕點師被別人看著做事情當(dāng)然會比平時自己完成的時候更有壓力。服務(wù)器也一樣,把請求留在服務(wù)器等服務(wù)器等待服務(wù)器也一樣會感覺到壓力。而且請求本身可以做別的事情,為什么非要吃飽撐著看別人做蛋糕呢?
為了不讓客戶端請求在服務(wù)器瞎等,我們就在程序中引入了短連接的概念。說到短連接,那和它相對的就是長連接,這在之前的文章中有說過,這是一種Web通信技術(shù)。短連接也一樣,通常是用做Web通信的。除了長連接和短連接之外,我們平時用的連接是不長不短的普通連接,在這里做下區(qū)分別搞混了。
通常PHP會把所有的代碼都執(zhí)行完才斷開HTTP連接,這當(dāng)然不行。如果PHP頁面處理數(shù)據(jù)需要很長時間,我們當(dāng)然要先把請求斷開再處理數(shù)據(jù)?,F(xiàn)在有一個PHP代碼,執(zhí)行需要5秒,5秒后會把用戶發(fā)送過來的數(shù)據(jù)寫入一個文件中。我們要在客戶端的數(shù)據(jù)發(fā)送成功時馬上斷開,別讓它等這5秒。
//突破PHP運(yùn)行時限
set_time_limit(0);
//無視請求斷開
ignore_user_abort();
//發(fā)送HTTP成功狀態(tài)碼
header('HTTP/1.1 200 OK');
//欺騙請求說“返回的數(shù)據(jù)是0字節(jié)”
header('Content-Length:0');
//威脅請求說“返回完成就自覺點斷開”
header('Connection:Close');
//假裝輸出數(shù)據(jù),讓請求覺得數(shù)據(jù)已經(jīng)輸出了
flush();
//接下來是蛋糕師傅的工作了
sleep(5);//反正客戶走了,先睡一覺
//醒來再做蛋糕
file_put_contents('Cake.txt',$_GET['data']);
看吧,我們使用了各種手段,軟硬兼施才讓請求自己斷開的。不過這已經(jīng)夠了,這就是我們要的結(jié)果。但是這樣的短連接也帶來了一個問題,我想大家都感受到了,就是數(shù)據(jù)返回的問題?,F(xiàn)在是不去傻傻的等糕點師做蛋糕了,但是蛋糕做完了總得拿吧?拿蛋糕又是一件麻煩的事情,不過現(xiàn)在都流行送貨上門不是嗎?為了避免悲劇的發(fā)生,我們要來創(chuàng)造戲劇??纯?0世紀(jì)的美國搞笑喜劇片吧,喜劇演員總是一胖一瘦一高一矮成對出現(xiàn)的。這樣的組合總是讓人忍俊不禁。所以短連接最好的搭檔就是長連接了,長連接的特長就是“送外賣”。由于它一直和客戶端保持通信,所以只要服務(wù)器做完“蛋糕”就可以委托長連接給短連接留下的地址(就是回調(diào)函數(shù)或者業(yè)務(wù)ID什么的)送去。這樣,就可以構(gòu)造一個很不錯的“蛋糕式Web通信系統(tǒng)”。
這篇文章要說的就是這么多,上面提到的長連接其實換成其它Comet方法也可以,比如長輪詢什么的。反正Comet方法基本都是“長”的,和這個短連接一起使用必定是喜劇啊。
文章題目:實現(xiàn)PHP的短連接
網(wǎng)站網(wǎng)址:http://m.rwnh.cn/news8/309458.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站營銷、定制網(wǎng)站、企業(yè)建站、軟件開發(fā)
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)