php長鏈接和短鏈接簡要區別

image

短鏈接

鏈接->傳輸數據->關閉鏈接php

好比HTTP是無狀態的的短連接,瀏覽器和服務器每進行一次HTTP操做,就創建一次鏈接,但任務結束就中斷鏈接。前端

具體就是調用close方法:linux

瀏覽器client發起並創建TCP鏈接 -> client發送HttpRequest報文 -> server接收到報文->server handle併發送HttpResponse報文給前端,發送完畢以後當即調用socket.close方法->client接收response報文->client最終會收到server端斷開TCP鏈接的信號->client 端斷開TCP鏈接。

也能夠這樣說:短鏈接是指SOCKET鏈接後,發送接收完數據後立刻斷開鏈接。apache

由於鏈接後接收了數據就斷開了,因此每次數據接受處理不會有聯繫。瀏覽器

這也是HTTP協議無狀態的緣由之一。安全

長鏈接

鏈接->傳輸數據->保持鏈接 -> 傳輸數據-> ...........->直到一方關閉鏈接,可能是客戶端關閉鏈接。服務器

長鏈接指創建SOCKET鏈接後無論是否使用都保持鏈接,但安全性較差。併發

每次咱們訪問PHP腳本的時候,都是當全部的PHP腳本執行完成後,咱們才獲得返回結果。socket

若是咱們須要一個腳本持續的運行,那麼咱們就要經過php長鏈接的方式,來達到運行目的。性能

通常php環境爲apache+php+linux,可是因爲apache對php鏈接都有時間限制,通常超過這個鏈接時間apache服務器會自動斷掉鏈接。

這種狀況下比較簡單方便的方式就是在php頁面中設置set_time_limit(0)(固然也能夠在php.ini配置文件中設置,可是這樣對整個環境產生影響,畢竟咱們並不想對全部鏈接均可以長時間鏈接,影響服務性能)

每一個PHP腳本都限制了執行時間,因此咱們須要經過 set_time_limit 來設置一個腳本的執行時間爲無限長,而後使用 flush() 和 ob_flush() 來清除服務器緩衝區,隨時輸出腳本的返回值。

<?php header("Content-Type: text/plain"); set_time_limit(0); while( true ) { // 持續執行的腳本 flush(); ob_flush(); sleep(5); } ?>

當咱們執行後,每隔5秒鐘,咱們會執行一次,經過這一方法,咱們能夠完成不少功能,例如後臺監控程序,定時執行功能,日誌分析,數據整理等耗時的操做。

image

相關文章
相關標籤/搜索