這一篇就說一下:web-server和指令碼還有資料庫的關係吧:
一般做web開發大家都習慣裝乙個wamp後者lamp。就是web-server,php和mysql的集合。問題是:為什麼要裝乙個web-server?按照原先寫c++的思維:我就有個c++的編譯器,然後就可以寫c++了啊,幹嗎還有裝乙個web-server?? 再者:web-server是什麼東西?是伺服器還是什麼?
自我理解:類似c++這樣的編譯型語言,在執行之前都是將原始檔整個都編譯好,其是一種編譯後執行的過程;而解釋性語言則是邊編譯邊執行的。那這就意味著:執行乙個php指令碼(解釋性語言)時,必須要有乙個直譯器在跑著。只有這樣才能做到邊解釋邊執行。
問題是:這個直譯器存在於**?我們是不是直接在伺服器上裝乙個然後啟動它呢?啟動之後怎麼處理呢?畢竟會有很多使用者同時過來執行同乙個php指令碼。直譯器乙個時刻只能解釋乙個php指令碼,那其餘請求指令碼只能排隊,這顯然是不能接受的。好吧:為了解決這個問題,我們給直譯器增加點功能,讓其有個程序(執行緒)管理功能。從而每個指令碼請求都單獨建乙個程序(執行緒)來處理,這樣就ok了。問題是:php直譯器僅僅是直譯器,並沒有增加這個功能。而伺服器上又是可能執行多種型別的指令碼的,我們不可能沒換一種就為一種指令碼再裝乙個執行緒(程序)管理功能的應用程式。 於是本著抽取簡化的原則:人們設計了webserver。
首先:web-server是乙個軟體。他乙個功能就是:他負責載入指令碼直譯器並執行,並負責管理各個請求的執行緒(程序)。
具體一點:
①:web-server是模組化構建的,比如:php直譯器是其中的乙個模組,web-server負責載入並執行它。當有php請求到來時:它會呼叫這個php直譯器模組去解釋執行請求對應的指令碼。
②:一旦乙個php請求到來之後:web-server會為這個請求建立乙個程序(執行緒)《說明:是程序還是執行緒取決於版本還有各種因素》。從而被請求的這個php指令碼就是執行在這個程序(執行緒)中的。執行完了則web-server會**這個程序,要麼銷毀要麼放到程序緩衝池中。
所以總結來說:指令碼是執行在web-server中的,前者依賴於後者!!
那資料庫呢?因為我們可能在指令碼中請求了資料庫,這時候不可避免要和資料庫打交道。當在web-server乙個程序中執行了php指令碼時:發現其要請求資料庫,這個時候其首先要連線資料庫,這就產生乙個對資料庫的連線。而mysql本身也是一種服務,它並不依賴於web-server,可以說它是和web-server平級的東西。它有個模組負責監聽對它發起的各種連線。於是當php執行對它發起乙個連線的時候:mysql監聽到了這個連線,一旦監聽到了則它會專門為這個連線建立乙個執行緒來進行處理!處理完這個連線中的所有請求之後才會**這個執行緒。
總體來說:
①:指令碼是依賴於web-server存在的,沒乙個指令碼請求的處理執行緒都是web-server來建立的。
②:web-server和mysql是同級別的概念,都是一種服務。 而php指令碼則是依賴於web-server存在的,都無法建立自己的執行緒。
③:對mysql,要區分開 連線 和 執行緒 這兩個概念,也要區分開:連線 和 查表 這兩個概念。其實這些一說出來都很明白不同,但是不去細想的話總是磕磕絆絆。
web開發入門感想
原創 negoo 方曉 經常在某些論壇和qq群裡看到一些朋友會問 怎樣才能學好php,怎樣才能學好 語言 但別人回答最多的是 從最 簡單 的開始。s 2 這個簡單也許真的不簡單,呵呵。下面我想分享一下自己學習的一些過程。先說些費話,語言組織能力差,說了不少費話,願意看的就看,不要罵我就行 其實學習一...
Python Vue開發Web入門例項
其實是個夭折了的練手專案,用python寫的後端,提供json格式資料給前端vue進行渲染 寫的比較亂,不過還是不忍扔掉,歸檔記錄一下吧,以後再用到了也可以做個參考 設定連線屬性cursorclass返回查詢結果為dict型別序列 conn pymysql.connect localhost roo...
WEB入門經典 Form驗證開發感想!
老大要我用asp.net做乙個使用者登入程式,我用c asp.net足足做了兩周多!別笑我啊,很鬱悶的事!以前一點都不了解asp.net是什麼,光用過vb.net,c 也是最近才學,還不到倆月,更別說自己懂不懂form驗證了 於是趕緊找資料看 照本宣科 地做了個簡單的驗證,交給老大看,老大給我一頓臭...