mysql長連線和短連線的問題

2021-09-30 06:23:58 字數 1925 閱讀 6069

什麼是長連線?

其實長連線是相對於通常的短連線而說的,也就是長時間保持客戶端與服務端的連線狀態。

通常的短連線操作步驟是:

連線-》資料傳輸-》關閉連線

而長連線通常就是:

連線-》資料傳輸-》保持連線-》資料傳輸-》保持連線-》…………-》關閉連線

這就要求長連線在沒有資料通訊時,定時傳送資料報,以維持連線狀態,短連線在沒有資料傳輸時直接關閉就行了

什麼時候用長連線,短連線?

長連線主要用於在少數客戶端與服務端的頻繁通訊,因為這時候如果用短連線頻繁通訊常會發生socket出錯,並且頻繁建立socket連線也是對資源的浪費。

但是對於服務端來說,長連線也會耗費一定的資源,需要專門的執行緒(unix下可以用程序管理)來負責維護連線狀態。

總之,長連線和短連線的選擇要視情況而定。

首先,如果使用了長連線而長期沒有對資料庫進行任何操作,那麼在timeout值後,mysql server就會關閉此連線,而客戶端在執行查詢的時候就會得到乙個類似於「mysql server has gone away「這樣的錯誤。

在使用mysql_real_connect連線資料庫之後,再使用mysql_options( &mysql, mysql_opt_reconnect, … ) 來設定為自動重連。這樣當mysql連線丟失的時候,使用mysql_ping能夠自動重連資料庫。如果是在mysql 5.1.6之前,那麼則應在每次執行完real_connect 之後執行mysql_options( &mysql, mysql_opt_reconnect, … ) ,如果是mysql 5.1.6+,則在connect之前執行一次就夠了。

第一種方法,當然是增加你的 wait-timeout值,這個引數是在my.cnf(在windows**下面是my.ini)中設定,我的資料庫負荷稍微大一點,所以,我設定的值為10,(這個值的單位是秒,意思是當乙個資料庫連線在10秒鐘內沒有任何操作的話,就會強行關閉,我使用的不是永久鏈結(mysql_pconnect),用的是mysql_connect,關於這個wait-timeout的效果你可以在mysql的程序列表中看到(show processlist) ),你可以把這個wait-timeout設定成更大,比如300秒,呵呵,一般來講300秒足夠用了,其實你也可以不用設定,mysql預設是8個小時。情況由你的伺服器和站點來定。

第二種方法

這也是我個人認為最好的方法,即檢查mysql的鏈結狀態,使其重新鏈結。

可能大家都知道有mysql_ping這麼乙個函式,在很多資料中都說這個mysql_ping的api會檢查資料庫是否鏈結,如果是斷開的話會嘗試重新連線,但在我的測試過程中發現事實並不是這樣子的,是有條件的,必須要通過mysql_options這個c api傳遞相關引數,讓mysql有斷開自動鏈結的選項(mysql預設為不自動連線),但我測試中發現php的mysql的api中並不帶這個函式,你重新編輯mysql吧,呵呵。但mysql_ping這個函式還是終於能用得上的,只是要在其中有乙個小小的操作技巧:

這是我的的資料庫操作類中間的乙個函式

function ping() }

我需要呼叫這個函式的**可能是這樣子的

for($i=0;$i<10;i++)

$db->ping(); //經過前面的網頁抓取後,或者會導致資料庫連線關閉,檢查並重新連線

$db->query(』select * from table』);

ping()這個函式先檢測資料連線是否正常,如果被關閉,整個把當前指令碼的mysql例項關閉,再重新連線。

經過這樣處理後,可以非常有效的解決mysql server has gone away這樣的問題,而且不會對系統造成額外的開銷。

mysql長連線和短連線的問題

什麼是長連線?其實長連線是相對於通常的短連線而說的,也就是長時間保持客戶端與服務端的連線狀態。通常的短連線操作步驟是 連線 資料傳輸 關閉連線 而長連線通常就是 連線 資料傳輸 保持連線 資料傳輸 保持連線 關閉連線 這就要求長連線在沒有資料通訊時,定時傳送資料報,以維持連線狀態,短連線在沒有資料傳...

長連線和短連線

短連線是指通訊雙方有資料互動時,就建立乙個tcp連線,資料傳送完成後,則斷開此tcp連線,一般銀行都使用短連線。比如http的,只是連線 請求 關閉,過程時間較短,伺服器若是一段時間內沒有收到請求即可關閉連線。其實長連線是相對於通常的短連線而說的,也就是長時間保持客戶端與服務端的連線狀態。通常的短連...

長連線和短連線

tcp ip tcp ip是個協議組,可分為三個層次 網路層 傳輸層和應用層。在網路層有ip協議 icmp協議 arp協議 rarp協議和bootp協議。在傳輸層中有tcp協議與udp協議。在應用層有 通過tcp協議來通訊的應用層協議包括ftp http telnet smtp等 通過udp協議來通...