假如你去蛋糕店定做一個蛋糕,你會呆著看糕點師傅做完嗎?正常都是先預訂,然后去做別的事情,過一段時間再去取吧?或者蛋糕店有送貨上門的服務,你定了蛋糕后留下地址它會給你送到。總之,正常人是不會呆著等的。那么我們給服務器發送一個數據讓它“做蛋糕”為什么要等呢?糕點師被別人看著做事情當然會比平時自己完成的時候更有壓力。服務器也一樣,把請求留在服務器等服務器等待服務器也一樣會感覺到壓力。而且請求本身可以做別的事情,為什么非要吃飽撐著看別人做蛋糕呢?
為了不讓客戶端請求在服務器瞎等,我們就在程序中引入了短連接的概念。說到短連接,那和它相對的就是長連接,這在之前的文章中有說過,這是一種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的短連接
網站網址:http://m.newbst.com/news8/309458.html
成都網站建設公司_創新互聯,為您提供面包屑導航、外貿網站建設、網站營銷、定制網站、企業建站、軟件開發
廣告
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源:
創新互聯