Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
網(wǎng)站構(gòu)建一個穩(wěn)定、高效的后臺服務(wù)器程序是一件非常重要的事情。要達到這樣的目的,選擇一款快速、高效的后臺程序款框架是我們必須要考慮清楚的。一個后臺框架是一系列工具、代碼包以及其他軟件模塊的集合,利用這些基礎(chǔ)設(shè)置你就可以快速的開發(fā)出功能全面的服務(wù)器后臺程序。這些框架在設(shè)計之初就考慮到了將來的服務(wù)器程序要面臨的需求,并且提供了比較合理全面的解決方案。我們只需要根據(jù)我們的需求,對應(yīng)到這些框架的不同模塊,利用這些模塊實現(xiàn)我們的業(yè)務(wù)代碼即可。
本人掌握了包含市面上大部分常用的編程語言以及相關(guān)的框架,也都使用過這些框架開發(fā)出了 server 程序。在2021年,我羅列出目前常用的幾個框架與大家分享交流。
編程語言:PHP
laravel是一個免費、開源的PHP開發(fā)框架,它是基于MVC程序結(jié)構(gòu)設(shè)計的。對于常年使用PHP語言做項目的人來說,laravel是普遍的首選方案。我以前接手的一些項目,云服務(wù)器平臺是客戶早年就在使用的,比如GoDaddy、Hostinger 等等,這些云平臺對PHP語言的支持非常好,那么考慮到入鄉(xiāng)隨俗,要使用云服務(wù)里的PHP環(huán)境,那么用laravel就是非常合適的了。
laravel提供了權(quán)限管理、API 設(shè)計、后臺緩存、日志管理、測試等多種功能。它的文檔也非常的全面易懂。laravel 非常適合用來開發(fā)博客網(wǎng)站、門戶網(wǎng)站、電商網(wǎng)站的后臺。
不過時過境遷,由于現(xiàn)在更多更好的框架的出現(xiàn),PHP語言以及l(fā)aravel變得有些過時和年邁,很多人會暫時放棄PHP以及l(fā)aravel,會嘗試使用其他的選擇。
編程語言:Python
我把這兩個框架放在一起進行說明。幾年前我在自學(xué)完P(guān)ython語言后,就去尋找基于Python的服務(wù)器開發(fā)框架,flask和Django是兩個常用的。在玩過了這兩個框架之后,我明確的選擇了Flask。因為我個人的開發(fā)風(fēng)格和習(xí)慣是前后端分離的,用Angular或者Vue去專心開發(fā)前端頁面,用框架細致的開發(fā)后端服務(wù)器的一些功能,前后端之間的通信和數(shù)據(jù)交換使用 Restful API 來實現(xiàn)。
Django也是一款比較強大的框架,但是它對前后端分離風(fēng)格的開發(fā)者不太友好。在開發(fā)的時候很多時候需要將前端的HTML、JavaScript和后端的Python進行聯(lián)合開發(fā),代碼可能會比較混亂。但是事情都有兩面性,反過來講Django的封裝性更好一些,很多功能都是拿來即用的,只要根據(jù)自己的需求稍加修改,就可以快速的實現(xiàn)一些功能,比如form表單。
而 Flask 是純粹的前后端分離的風(fēng)格,屬于微型框架。你在用Flask寫代碼的時候,可以完全不需要考慮前端。可以專心的開發(fā)服務(wù)器程序。最后提供一些 API 訪問鏈接地址給前端即可。所以Flask 框架會比Django更小,使用flask也需要開發(fā)者去處理和開發(fā)更多的功能邏輯。
編程語言:JavaScript / TypeScript
得益于node.js的流行和廣泛使用,歷史悠久、可愛的JavaScript語言終于可以涉足到后臺服務(wù)器程序開發(fā)領(lǐng)域了。一般的,在安裝好node.js后,很少有人會直接用JavaScript原生的開發(fā)服務(wù)器代碼,而是會選擇一款框架。那么express.js和koa2就是目前比較流行的兩款框架了。
他們都可以用 JS 快速的開發(fā)出 API 程序,也都能通過安裝其他的模塊實現(xiàn)與后臺數(shù)據(jù)庫的連接。我個人在多年的編程經(jīng)歷中,面對中小型的項目,對性能要求不高的時候,都會考慮使用這兩個框架。一般會很快的寫好 Restful API 程序和數(shù)據(jù)庫的CRUD程序。另外部他們兩個的部署也比較方便,Linux上裝好node.js,然后服務(wù)器程序文件放在一個地方,用 pm2 這種基于 node.js 的命令工具啟動即可向前端提供服務(wù)了。
這兩個框架其實是同一班人的作品。express.js問世的較早,koa2其實是express.js的改進,代碼更加精煉緊湊,都是不錯的選擇。
編程語言:Java
聚光燈照顧來,歡呼尖叫響起,superstar 到來了。沒錯,spring是這幾年服務(wù)器開發(fā)框架里的明星。基于Java這幾十年的穩(wěn)健發(fā)展,已經(jīng)有了太多的處理各種問題和需求的Java第三方包。再結(jié)合spring的優(yōu)良品質(zhì),比如常見的權(quán)限控制、Restful API 開發(fā)、SQL/NoSQL 數(shù)據(jù)庫操作這種常見的功能以外,還可以想象一下利用spring結(jié)合hadoop生態(tài)來開發(fā)big data 應(yīng)用,那會是另外一片天空了。
我個人在2020年指導(dǎo)了幾個本科大學(xué)生的畢業(yè)設(shè)計項目。他們告訴我,他們的老師不僅要求他們寫論文,還需要他們開發(fā)一個完整的Web項目,要有網(wǎng)站、服務(wù)器,后面還要掛個數(shù)據(jù)庫。值得注意的一點是,導(dǎo)師們要求他們必須用spring框架實現(xiàn)服務(wù)器。這些學(xué)生當(dāng)然連前端三劍客 HTML/CSS/JavaScript 都還沒有玩會,后臺抽象的代碼更是小白一個。他們說導(dǎo)師也只是知道有這種技術(shù),但是也沒法完全指導(dǎo)他們,所以我就有了雪中送炭的機會。
另外,現(xiàn)在很多中大型網(wǎng)站的后臺的主要業(yè)務(wù)邏輯,就是用java的spring來實現(xiàn)的,并結(jié)合其他技術(shù)向外提供服務(wù)。比如國內(nèi)的一些電商平臺就是這樣的設(shè)計。
上面我只是列舉了幾個典型的方案,其實還有很多,我基本上都玩過。比如 hapi(JavaScript)、Golang(Go)、Slim(PHP)等等。大家可以根據(jù)自己的需求和實際情況,了解這些框架后進行選擇。
和擇偶很類似,選擇適合的才是明智之選。大家都說她好,包括你的父母都很欣賞那個人,但是你就是不喜歡。所以強扭的瓜不甜。下面是幾條選擇框架的方針,供大家參考:
送給大家一句話:
擇偶時,沒有最好的,只有合適的。選擇框架也是一樣的 !
一個學(xué)期前小編也是對前端知之甚少,現(xiàn)在嘛,差不多弄懂了一些,來講講自己的理解吧ヽ( ̄▽ ̄)? 因為學(xué)習(xí)的深度不是很深,有錯誤的地方歡迎指正~如果沒有學(xué)會建站,小編教你如何簡單快速搭建網(wǎng)站,喜歡的收藏哦~~不要錯過
首先我們要知道訪問網(wǎng)站的流程是什么?大家每天也訪問。
假設(shè)大家在瀏覽器地址欄輸入這個問題的地址
https://www.頭條.com/question/22689579
當(dāng)自己的電腦得到一個 html頁面 (圖中HTTP 響應(yīng)中 body 里的內(nèi)容)之后,就會對它進行解析。HTML 就是一種超文本標(biāo)記語言。給大家舉一些實例看看:
[img]圖片[/img] 用來粘貼圖片
[url]超鏈接[/url] 用來粘貼地址
服務(wù)器返回給你的html文件,寫的是一些代碼,大概是這樣的:
瀏覽器拿到這些代碼之后,將分析渲染好頁面顯示出來,如果不用css,效果如下圖,按照瀏覽器默認的樣式顯示出表格,超鏈接等。
大家有么有覺得默認樣式有點ε(┬┬﹏┬┬)3……所以很多情況我們需要自定義這些樣式,目前通用的樣式語言就是CSS,我們用CSS寫一些自定義樣式的代碼,之后在 HTML 文件里用一個<link>標(biāo)簽把這些規(guī)定樣式的 CSS 與表達內(nèi)容語義的 HTML 代碼鏈接起來,然后大家就能看到以往所謂的正常的頁面,是不是很厲害呢~~~
屬性:值
比如頭條的分布框架排版,它的 CSS ,截圖大體如下
把第一個屬性對應(yīng)的代碼翻譯一下的話,背景圖像位置偏移量(background - position)在圖像距離頁面內(nèi)左上角水平1px垂直2px處,瀏覽器會規(guī)規(guī)矩矩的地實現(xiàn)代碼要求的效果,所以當(dāng)大家在頁面上下滾動時,頂上那個導(dǎo)航條都會牢牢地黏在窗口頂部固定的位置,不發(fā)生偏移。
再講講其他幾個屬性解釋一下:
left 為240px 說明這個模塊需緊貼著窗口的左240px處
width 和 height 指定模塊的寬和高
border 指明這個模塊的邊界范圍
換句話說,就是瀏覽器就會根據(jù)這些 CSS 代碼,自動描繪出對應(yīng)的樣式。
像語言一樣,大家在網(wǎng)頁里的 發(fā)現(xiàn)的HTML 代碼也不一定是標(biāo)準(zhǔn)的,就好比有時候發(fā)音不太標(biāo)準(zhǔn),別人就會去猜測你說的是什么一樣,sometimes,程序猿不小心寫錯了一個 HTML代碼,瀏覽器也會試圖猜測這些人類原來到底想寫什么,之后做出對應(yīng)的處理,而這里的猜是要有一個常識做依據(jù)的。加上有些瀏覽器的功能不一,有的支持一些標(biāo)簽,有一些又不支持,還有一些混亂的情況。
為了防止大家混淆,我們要對 HTML 代碼里的標(biāo)簽,標(biāo)簽how寫,標(biāo)簽可以hava屬性這些東西,建立一個符合的標(biāo)準(zhǔn),HTML5 就是其中一個比較新的標(biāo)準(zhǔn)。其中新加了很多可以用的標(biāo)簽和屬性,然后各大瀏覽器也大刀闊斧的按這個標(biāo)準(zhǔn)去實現(xiàn)了很多新標(biāo)簽和屬性。
本來前端程序員要寫一堆代碼去實現(xiàn)的效果,現(xiàn)在瀏覽器都給實現(xiàn)了,只需程序猿寫兩三行,調(diào)用一下瀏覽器就給搞定了,十分簡單,所以很多人都愿意去推廣這個標(biāo)準(zhǔn)~(當(dāng)然新標(biāo)準(zhǔn)也不可能是完美的,也會有一些問題,有興趣的朋友可以去查查)
至于 XHTML,就是 HTML 的表親,XML 和 HTML 自己的雜交系列,對語法要求十分的嚴格,為了兼容 XML,在語法上與 HTML 有一些不同。
有了表示內(nèi)容和語義的 HTML,規(guī)定樣式的 CSS,得到的是靜態(tài)的頁面,沒什么動畫,雖然用 CSS 可以有一些動畫,需要刷新數(shù)據(jù)才可以,這么呆板單調(diào)的網(wǎng)頁怎么能展現(xiàn)我大智人種族的創(chuàng)造性!于是我們創(chuàng)造了 Javascript(JS) 來給頁面添加一些動態(tài)的效果,比如頭條的發(fā)表的標(biāo)簽,鼠標(biāo)移上去會彈出一個小窗口,這個就是 JS 實現(xiàn)的效果啦。
瀏覽器都會幫大家實現(xiàn)一些Javascript可以用的工具(函數(shù),對象等),只要寫一些 JS 的代碼,保存在 xxx.js 里,在 html 文件中用 <script> 關(guān)聯(lián)進來就可以用了,像上圖這個效果應(yīng)該就包括了
鼠標(biāo)懸停到標(biāo)簽上時創(chuàng)建一個新的 <div> 小窗口
用 JS 向頭條服務(wù)器發(fā)送一個請求,得到這個小窗口應(yīng)該顯示的數(shù)據(jù),放在這個小窗口里(這就是所謂的AJAX,不用刷新就能與服務(wù)器進行交互,更新頁面的一小部分~)
瀏覽器拿到這樣的代碼,就會解析并實現(xiàn)出相應(yīng)的效果。其實用來寫瀏覽器腳本的,也不是非得JavaScript 不可,不過是各大瀏覽器都默認了:請用 JS 寫這些動態(tài)效果的代碼給我解析~
以上就是前端部分的內(nèi)容,下面簡述一下后端的東西吧> <
瀏覽器給服務(wù)器發(fā)一個請求,服務(wù)器不是一看就知道怎么響應(yīng)的。首先這些請求和響應(yīng)要有一個通用的寫法,也就是要有一個協(xié)議,常用的是 HTTP 協(xié)議。
像最前面的圖,服務(wù)器的響應(yīng)寫了一個狀態(tài)碼 200 OK ,是 HTTP 協(xié)議里約定俗成的一個東西,服務(wù)器寫 200 OK 在響應(yīng)里,表示“你請求的這個東西我有”,如果是404 Not Found,就是“你請求的這個東西我這里沒有”。
HTTP 響應(yīng)里還包括很多東西,比如 Content-type 表示服務(wù)器發(fā)過來的文件類型是什么(文本?動畫?圖片?音頻?),這樣發(fā)過去了人家瀏覽器好知道怎么展示給用戶看。人家服務(wù)器怎么知道按協(xié)議要寫什么東西進去呢,這就是 Web Server 干活的時候了。
形象化一下HTTP響應(yīng),大概就長這樣:
再上個錘子,瀏覽器和服務(wù)器之間請求響應(yīng)的過程大致是長這樣的,右下角的那些東西就是由 Web Server 生成的(服務(wù)器腳本可以做一些改動,但這些一般是 Web Server 的份內(nèi)活):
再比如說很多時候你訪問一個網(wǎng)站,瀏覽器里輸?shù)牡刂凡]有寫明你請求的文件,比如這個問題的地址是:
http://www.頭條.com/question/22689579
但頭條的服務(wù)器其實返回了一個html給你,服務(wù)器怎么知道這個地址對應(yīng)要返回什么樣的 html 代碼給你的?也是 Web Server 干的活。
除了瀏覽器輸?shù)刂非没剀囘@種赤裸裸的訪問,客戶端與服務(wù)器的交互還有很多種,比如:
前面提到的用 JS 完成的 AJAX,有點像瀏覽器和服務(wù)器之間的悄悄話~
還有其他應(yīng)用軟件與服務(wù)器的交互,比如:
微信、QQ 與騰訊的服務(wù)器的交互
網(wǎng)游客戶端與網(wǎng)游公司服務(wù)器的交互
搜索引擎用來搜集網(wǎng)頁信息的程序(爬蟲)與各種各樣的網(wǎng)站服務(wù)器的交互
只要你知道用什么地址訪問、怎樣訪問人家的服務(wù)器,并且有相應(yīng)權(quán)限,你也可以自己寫一些程序去和他們的服務(wù)器交互(比如用微博API - 新浪微博API獲取微博,開發(fā)第三方應(yīng)用或者做數(shù)據(jù)分析)。
從這些例子里可以看出,客戶端與服務(wù)器的交互的主體、客體、載體是五花八門的:
服務(wù)器可以是大型機也可以是個人電腦,只要能跑相應(yīng)的程序就行
客戶端像前面舉的栗子里一樣,可以是各種軟件,而且這些軟件不一定運行在個人電腦上,也可以是手機、平板、智能穿戴設(shè)備等等
有時候不是傳生成好的 HTML 或者其他服務(wù)器上已經(jīng)有的文件,而是傳輸經(jīng)過一定邏輯處理后生成的字符串或者其他各種封裝好的數(shù)據(jù)
像前面提到的 HTML 需要有一定標(biāo)準(zhǔn)一樣,為了防止混亂和雞同鴨講,我們又需要先對這些機器需要怎么交互達成一定共識,再讓它們進行交流。人與人之間通信,需要先有一種大家都認識的寫法(比如簡體字/繁體字)和一種彼此都懂的語言(比如普通話/廣東話)。
要讓這些形形色色的機器能夠通過網(wǎng)絡(luò)進行交互,我們就需要指明一種協(xié)議(比如 HTTP/HTTPS)和一種數(shù)據(jù)封裝格式(比如 HTML/XML),Web Server 提供的 Web Service,指的就是這種協(xié)議+格式的交流體系。不過 Web Service 的生態(tài)系統(tǒng)和 HTML 的標(biāo)準(zhǔn)不一樣,用戶可以選擇的協(xié)議和數(shù)據(jù)封裝格式更多,普通的網(wǎng)站訪問用的 HTTP + HTML 只是其中一種,一些封閉系統(tǒng)內(nèi)的交流還可以自己定義一個協(xié)議和格式來用(比如 QQ)。
Web Service 傳輸?shù)臄?shù)據(jù)再經(jīng)由本地客戶端(瀏覽器、QQ/微信,網(wǎng)游客戶端等)的分析渲染,就能夠以普通人能夠理解的形式展現(xiàn)出來。此外還有一些 Web Service 并不是為普通用戶設(shè)計的,像前面提到的微博API,是用來給程序猿進行二次開發(fā)的~
除了提供 Web Service, Web Server 還會兼顧很多功能,包括提供緩存,平衡負載,這樣在訪問量比較大的時候能有有條不紊地接客。常見的現(xiàn)成的 Web Server 有開源的 Apache、Nginx和微軟的IIS,你也可以用一些工具(比如 Node.js )自己定制一個。因為 Web Server 需要比較好的性能,所以投產(chǎn)時用的 Web Server 通常是C/C++/Java寫的,但是其實很多語言都可以寫,而且配合上語言底層的優(yōu)化和好的模型,其他語言寫的 Web Server也可以有不錯的表現(xiàn)。
開頭那張圖里服務(wù)器接到請求之后可以給訪客發(fā)送對應(yīng)的文件,但21世紀(jì)的服務(wù)器怎么可能只會“接請求-發(fā)文件”這么弱智的一招呢,人家還可以處理你上傳來的文件的!還可以接受你發(fā)過來的各種請求,去操作服務(wù)器本地的文件or數(shù)據(jù)庫的!要干這些事,自然服務(wù)器那邊也少不了要有代碼了,這些代碼就是服務(wù)器腳本。前面說的 Web Service 傳輸?shù)臄?shù)據(jù),主要也是由服務(wù)器腳本生成,再交由 Web Server ,按照某種協(xié)議套好整個響應(yīng)的格式,返回給客戶端的。
同一個網(wǎng)址,每個人看到的頁面不一定是一樣的,比如頭條的網(wǎng)址都是
http://www.toutiao.com/
但是沒登陸和登陸之后看到的東西不一樣,登陸之后每個人看到的導(dǎo)航欄的用戶信息,關(guān)注的動態(tài),都不一樣。服務(wù)器腳本可以對這些不同的狀態(tài),生成不同的頁面,交給 Web Server 返回給瀏覽器。
知乎的主頁給大家看到的 html 整體來說是差不多的,都有導(dǎo)航欄,左邊是關(guān)注的動態(tài),右邊是廣告和邊欄,每一塊的整體構(gòu)造大同小異,只是一些地方內(nèi)容有所區(qū)別。服務(wù)器腳本就是利用已知的數(shù)據(jù),在這些因人而異的地方填入相應(yīng)的內(nèi)容,生成給每個人看的頁面。
比如我的主頁,導(dǎo)航欄右邊的頭像和名字跟別人看到的不一樣,就是因為這塊地方有一個放圖片的<img>標(biāo)簽和一個寫名字的<span>標(biāo)簽,服務(wù)器腳本在查詢本地的數(shù)據(jù)之后給我返回的頁面里<img>的標(biāo)簽填了我頭像的圖片鏈接,<span>標(biāo)簽里填了我的頭條名,給別人的頁面就填其他鏈接、其他名字,這樣每個人看到的頁面就不一樣了。
PHP 就是一種常見的用來寫服務(wù)器腳本的語言,其實只要是能拿來寫大家傳輸數(shù)據(jù)的通用接口(CGI)的語言都可以用來寫服務(wù)器腳本(也就是說幾乎所有編程語言都可以寫 = =b),只是因為現(xiàn)成工具的豐富程度和專攻程度不一樣,所以有一些語言在寫服務(wù)器端腳本的時候會比較熱門。
為了方便,我們在寫服務(wù)器腳本的時候,通常還會用個同語言寫的 Web Framework 來處理各種細節(jié),防御一些常見的攻擊,提供跨站認證(比如用已有的微博賬號注冊其他網(wǎng)站)的接口,利用cookie處理登陸狀態(tài)和用戶設(shè)置,生成網(wǎng)頁模版之類的。如果你用 C# 或者 Visual Basic 寫服務(wù)器腳本,就可以用 http://ASP.NET 這個框架實現(xiàn)這些功能,幫你省點麻煩。不過現(xiàn)在不少人是反過來為了一個好用的 Web Framework 去選擇它對應(yīng)的服務(wù)器腳本語言的。
簡單概括一下,對于我們普通的網(wǎng)站訪問,涉及到的技術(shù)就是:
用戶操作瀏覽器訪問,瀏覽器向服務(wù)器發(fā)出一個 HTTP 請求;
服務(wù)器接收到 HTTP 請求,Web Server 進行相應(yīng)的初步處理,使用服務(wù)器腳本生成頁面;
服務(wù)器腳本(利用Web Framework)調(diào)用本地和客戶端傳來的數(shù)據(jù),生成頁面;
Web Server 將生成的頁面作為 HTTP 響應(yīng)的 body,根據(jù)不同的處理結(jié)果生成 HTTP header,發(fā)回給客戶端;
客戶端(瀏覽器)接收到 HTTP 響應(yīng),通常第一個請求得到的 HTTP 響應(yīng)的 body 里是 HTML 代碼,于是對 HTML 代碼開始解析;
解析過程中遇到引用的服務(wù)器上的資源(額外的 CSS、JS代碼,圖片、音視頻,附件等),再向 Web Server 發(fā)送請求,Web Server 找到對應(yīng)的文件,發(fā)送回來;
瀏覽器解析 HTML 包含的內(nèi)容,用得到的 CSS 代碼進行外觀上的進一步渲染,JS 代碼也可能會對外觀進行一定的處理;
用戶與頁面交互(點擊,懸停等等)時,JS 代碼對此作出一定的反應(yīng),添加特效與動畫;
交互的過程中可能需要向服務(wù)器索取或提交額外的數(shù)據(jù)(局部的刷新,類似微博的新消息通知),一般不是跳轉(zhuǎn)就是通過 JS 代碼(響應(yīng)某個動作或者定時)向 Web Server 發(fā)送請求,Web Server 再用服務(wù)器腳本進行處理(生成資源or寫入數(shù)據(jù)之類的),把資源返回給客戶端,客戶端用得到的資源來實現(xiàn)動態(tài)效果或其他改變。
注意這只是小網(wǎng)站里比較常見的模型,大網(wǎng)站為了解決規(guī)模問題還會有很多處理,每個環(huán)節(jié)都會有一些細微的差異,中間還會使用各種各樣的工具減輕服務(wù)器的壓力,提高效率,方便日常維護~
為了方便調(diào)試,很多 Web Framework 會自帶一個簡單的 Web Server,或者有些 Web Server 會自帶一個簡單的 Web Framework ,實際部署到服務(wù)器上開放使用的時候為了性能或者安全等多方面的考慮,可以把內(nèi)置的 Web Server 換成其他的,比如 Apache 或者 Nginx (舉個栗子,知乎用的是 Tornado 做 Framework,Server 換成了 Nginx,見知乎使用了哪些框架和開源庫?)。如果是開源的東西,還可以在遵守開源協(xié)議的前提下自己改一下再用~
因為后端不像前端已經(jīng)有 HTML + CSS + JS 這樣的既定事實標(biāo)準(zhǔn),服務(wù)器腳本與 Web Framework 的選擇很多,所以新手會聽到很多眼花繚亂的技術(shù)名詞的地方多在這里~ 舉一些栗子,早年常見的服務(wù)器端語言有:
開源的 PHP
Sun 公司的 JSP 中使用的 Java
微軟的 ASP 中使用的 VBScript
現(xiàn)在在這方面的應(yīng)用熱起來的語言有
Python,對應(yīng)常見的 Framework 包括知乎和Quora有用到的 Tornado(其實是自帶 Framework 的 Web Server),社區(qū)很成熟的 Django (用戶包括 Instagram、Pinterest)等
Ruby,一般都用 Rails 這個 Framework,用戶包括 Github、早期的 Twitter 等
逆天的 JavaScript,有了 Node.js 這個平臺,Web Server、服務(wù)器腳本和瀏覽器腳本全都可以用 JavaScript 來寫……Node.js上最常用的 Framework是Express
微軟家的則跟著 http://ASP.NET 轉(zhuǎn)移到了C# 或者 Visual Basic
Erlang,擅長大規(guī)模的并發(fā),不少游戲公司拿來寫服務(wù)器,靠幾十個工程師支撐幾億用戶的WhatsApp也是用的這個~
幾種常見的架構(gòu)包括:
LAMP = Linux + Apache + MySQL + PHP(P還可能是Python或Perl。有時候L會改成W=Windows。),也就是服務(wù)器上的操作系統(tǒng)是 Linux,Web Server 用 Apache,數(shù)據(jù)庫用 MySQL,服務(wù)器腳本用 PHP,這些都是開源技術(shù),網(wǎng)站起步時用起來的成本會比較低,所以是普通網(wǎng)站里非常常見的架構(gòu)(雖然對于發(fā)展得很大的網(wǎng)站會遇到很多瓶頸),F(xiàn)acebook就是這種,淘寶也曾經(jīng)是。
J2EE,Java 世界的架構(gòu),通常是企業(yè)用的(銀行、大型公司,.etc),比較常見地還會搭配一種 UNIX 做操作系統(tǒng),Apache 做 Web Server,Tomcat 轉(zhuǎn)換 JSP 到 Java 給服務(wù)器程序用(其實它也自帶 Web Server),Oracle 數(shù)據(jù)庫等等。不一定拿來建站,常常用來提供企業(yè)里的各種需要用到網(wǎng)絡(luò)的業(yè)務(wù)。我們學(xué)校教務(wù)系統(tǒng)就是用J2EE做的=。= 淘寶現(xiàn)在也是從LAMP轉(zhuǎn)型到了這個。關(guān)于tomcat等之前的文章也有提及環(huán)境的配置。
http://ASP.NET,微軟家的架構(gòu),通常會搭配 Windows Server 操作系統(tǒng),SQL Server 數(shù)據(jù)庫,IIS 做 Web Server。StackOverflow和京東(曾經(jīng))就是這個架構(gòu)。
神奇的MEAN架構(gòu),MongoDB做數(shù)據(jù)庫,Express做 Web Framework,Angular 做前端的 JavaScript 框架,Node.js 用于編寫 Web Server。神奇之處在于這幾個東西的語言都是 JavaScript (MongoDB的實現(xiàn)不是,但與外界溝通用的語言是)。因為是比較新的架構(gòu),還有待時間的考驗,不過被很多人(尤其是靠 JavaScript 吃飯的前端程序猿們)熱切關(guān)注。
一般來說重點不在技術(shù)而且在乎成本的新網(wǎng)站比較喜歡用 LAMP,重視安全穩(wěn)定和速度的企業(yè)和機構(gòu)喜歡 J2EE,想省事的網(wǎng)站喜歡 http://ASP.NET,比較 Geek 的網(wǎng)站和創(chuàng)業(yè)公司喜歡折騰各種 Python、Ruby、Node.js世界的東西,Google 這樣現(xiàn)成的技術(shù)都解決不了需求的超大型網(wǎng)站就自己折騰解決方案。
如果大家喜歡,歡迎收藏,多多關(guān)注小編吶~ 還有會更多精彩的分享
家好, 我是可愛的排骨
目錄一. speedtest 簡介.
二. 安裝到 Windows. 難度 ★★
三. 安裝到 Linux. 難度 ★★★★★
四. 安裝到 群暉 DSM. 難度 ★
五. 使用 Docker 鏡像部署. 難度 ★★★
六. 總結(jié)
1. 作者簡介.
喝井不忘挖水人, speedtest 的作者不是排骨, 是下面這位.
speedtest 是由意大利的一位90后愛打游戲愛跳舞機的逗B碼農(nóng) Federico Dossena (見下圖) 發(fā)布的一個開源項目 (https://github.com/adolfintel/speedtest).
2. 原理簡介
speedtest 以 HTML 和 JavaScript 為主, 利用客戶端的瀏覽器通過上傳和下載垃圾數(shù)據(jù)來測試 HTTP 傳輸速度, 和大家常用的 speedtest.net 差不多.
speedtest 使用任意操作系統(tǒng)上的任意 Web 服務(wù)器作為服務(wù)端, 所以理論上它支持 Windows/MacOS/Linux/Unix 等系統(tǒng), IIS/Nginx/Apache/lighttpd 等服務(wù)器.
任意瀏覽器作為客戶端如 Chrome/Firefox/IE11/Edge/Safari/Opera?
speedtest 默認使用 PHP 作為服務(wù)端, 目前也有 node.js 版本, 也可以只用純靜態(tài)服務(wù)器.
本文所說的 speedtest 與 Ookla 公司的 speedtest.net 及相關(guān)測速 app 沒有任何關(guān)系, 沒何關(guān), 沒關(guān), 沒.
在 Windows 上安裝 speedtest 應(yīng)該是絕大多數(shù)普通用戶, 為了照顧沒有相關(guān)經(jīng)驗的用戶, 這里排骨寫的步驟較多較細, 但是已經(jīng)最大化的精簡了.
本文以 Windows 10 為例, Windows 7 也適用, 不過某些地方有不同, 排骨會注明.
1. 安裝 IIS 服務(wù)器.
使用 Win+R 打開運行窗口, 輸入 **OptionalFeatures **打開 Windows 功能.
必須選擇 IIS 管理控制臺/靜態(tài)內(nèi)容/默認文檔/CGI 4個選項. 默認文檔不是必需的.
2. 下載并安裝 PHP Manager for IIS.
PHP Manager for IIS 是微軟官方推薦的一個 IIS 插件, 可以最大化的簡化 IIS 上配置 PHP 的過程. 如果不用這個插件, 在 Windows 上配置 PHP 會比 Linux 上更麻煩.
下載地址: https://www.iis.net/downloads/community
Win7 系統(tǒng)安裝** PHPManagerForIIS-1.2.0**
Win10 系統(tǒng)安裝 PHPManagerForIIS_V1.5.0, 這里排骨以 Win10 為例.
如果出現(xiàn) SmartScreen 提示, 請按上面的圖繼續(xù).
安裝過程就是一路 Next.
3. 下載 PHP 包并解壓
x64版下載: https://windows.php.net/downloads/releases/php-7.2.6-nts-Win32-VC15-x64.zip
x86版下載: https://windows.php.net/downloads/releases/php-7.2.6-nts-Win32-VC15-x86.zip
將下載好的 zip 包解壓到任意路徑, 如 F:\php
4. 為 IIS 配置 PHP.
使用 inetmgr 命令掃開 IIS 管理器.
打開 PHP Manager.
通過 “Register new PHP version” 設(shè)置 PHP 引用路徑.
上一次我們把 PHP 的文件解壓到了 F:\php.
使用 Check phpinfo() 測試 PHP 配置是否成功.
如果看到這個紫色頁面, 就說明 PHP 配置成功了.
5. 下載 speedtest 包并解壓.
speedtest 包下載: https://github.com/adolfintel/speedtest/archive/4.5.5.zip
解壓到 C:\inetpub\wwwroot, 熟悉 IIS 配置的用戶可以解壓到其它地方.
注意所有文件都在壓縮包里的子目錄中!
6. 測試 speedtest.
用瀏覽器 (推薦 Chrome) 訪問 http://localhost/example-pretty.html. 如果出現(xiàn)下圖這樣的測試結(jié)果則表達 speedtest 運行成功.
7. 防火墻開啟入站 80 端口.
這一步是可選的. 如果內(nèi)網(wǎng)的其它電腦或手機無法訪問這臺 Windows 上的 speedtest, 可能是被 Windows 防火墻擋了.
將 Windows 入站端口 80 打開后, 內(nèi)網(wǎng)的其它設(shè)備才能訪問剛剛安裝好的 speedtest.
以管理員身份運行 cmd 打開命令行窗口. 使用下面的命令行給防火墻開啟 80 端口.
netsh advfirewall firewall add rule name=“speedtest” dir=in action=allow protocol=TCP localport=80
Win7命令為
netsh firewall add portopening TCP 80 “speedtest”
最后用手機或其它電腦訪問 http://192.168.1.91/example-pretty.html 開始測速吧 (假設(shè)安裝 speedtest 的電腦 IP 為 192.168.1.91).
一般用戶家中沒有 Linux 電腦, 不過排骨考慮到使用 OMV 等系統(tǒng)作 NAS 的用戶和自購有 VPS 的用戶, 順便也寫一下 Linux 上安裝 speedtest的步驟. 用 Linux 系統(tǒng)的用戶基礎(chǔ)都不會太菜吧?
下面 ubuntu 18.04 為例, 其它 Linux 版本的用戶請自行調(diào)整.
1. 安裝 nginx 和 php-fpm
sudo apt install nginx php-fpm
2. 修改 nginx 站點配置
sudo nano /etc/nginx/sites-available/default
以下面為修改配置文件內(nèi)容, 注意 /var/run/php/php7.2-fpm.sock 的路徑是不是正確.
server { listen 80 default_server; root /var/www/html; index index.html; server_name _; location / { try_files $uri KaTeX parse error: Expected 'EOF', got '}' at position 19: …/ =404; }? locatio… { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; }}
重啟 nginx.
sudo service nginx restart
3. 下載 speedtest 并解壓
speedtest 包下載: https://github.com/adolfintel/speedtest/archive/4.5.5.zip
sudo wget https://github.com/adolfintel/speedtest/archive/4.5.5.zip
解壓到 /var/www/html.
sudo unzip 4.5.5.zip -d /var/www/html/sudo mv /var/www/html/speedtest-4.5.5/* /var/www/html/
4. 防火墻開啟入站 80 端口
這步也是可選的.
sudo ufw allow 80
安裝配置完成. 開始測速吧!
在群暉系統(tǒng)上安裝 speedtest 是個非常好的選擇, 也是最簡單的方案. 與 Linux 上安裝 speedtest 類似, 群暉的管理系統(tǒng)本身就是基于 Linux 和 nginx 的.
1. 下載 speedtest 并上傳到群暉.
speedtest 包下載: https://github.com/adolfintel/speedtest/archive/4.5.5.zip
將 speedtest 包中的文件上傳到群暉共享文件夾的某個目錄, 如下圖
2. 安裝 Web Station 和 PHP 7.0.
從群暉套件中心可以找到, PHP 7.0 可能在安裝 Photo Station 時一并安裝好了.
3. 設(shè)置 PHP 和 虛擬主機.
打開 Web Station 套件, 選擇 PHP 設(shè)置, 編輯默認PHP配件文件. 勾選 openssl.
選擇 虛擬主機, 點擊 新增, 然后按下圖配置虛擬主機. 其中 端口 和 文檔根目錄 按實際情況設(shè)置.
安裝配置完成. 開始測速吧!
用 Docker 部署 speedtest 是最簡易快速的方法, 但是對用戶來說起點也是最高的.
排骨專門給 speedtest 制作了 Docker 鏡像 (6MB), 比原作者的鏡像 (158MB) 小很多很多很多.
1. 下載 speedtest 鏡像.
docker pull cuteribs/speedtest
2. 創(chuàng)建 speedtest 容器.
docker run -d --name speedtest -p 80:80 cuteribs/speedtest
安裝配置完成. 開始測速吧! 2行命令就搞定了, 是不是簡單得要死而絕大多數(shù)人又不會?
按上面任一方法搭建好 speedtest 服務(wù)器后, 就可以愉快的測速了.
不論是測內(nèi)網(wǎng)還是外網(wǎng)
不論是測 路由器, AP, 網(wǎng)卡還是VPS
不論是測 有線 NAT, 2.4G/5G WiFi 還是 SS等軟件轉(zhuǎn)發(fā)
只要打開瀏覽器, 輸入 speedtest 地址就行了.
speedtest 測速的優(yōu)點:
speedtest 測速的缺點:
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。