整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線(xiàn):

          沒(méi)有最好,只有合適-選擇服務(wù)器框架也是如此

          網(wǎng)站構(gòu)建一個(gè)穩(wěn)定、高效的后臺(tái)服務(wù)器程序是一件非常重要的事情。要達(dá)到這樣的目的,選擇一款快速、高效的后臺(tái)程序款框架是我們必須要考慮清楚的。一個(gè)后臺(tái)框架是一系列工具、代碼包以及其他軟件模塊的集合,利用這些基礎(chǔ)設(shè)置你就可以快速的開(kāi)發(fā)出功能全面的服務(wù)器后臺(tái)程序。這些框架在設(shè)計(jì)之初就考慮到了將來(lái)的服務(wù)器程序要面臨的需求,并且提供了比較合理全面的解決方案。我們只需要根據(jù)我們的需求,對(duì)應(yīng)到這些框架的不同模塊,利用這些模塊實(shí)現(xiàn)我們的業(yè)務(wù)代碼即可。

          本人掌握了包含市面上大部分常用的編程語(yǔ)言以及相關(guān)的框架,也都使用過(guò)這些框架開(kāi)發(fā)出了 server 程序。在2021年,我羅列出目前常用的幾個(gè)框架與大家分享交流。

          Laravel

          編程語(yǔ)言:PHP

          laravel是一個(gè)免費(fèi)、開(kāi)源的PHP開(kāi)發(fā)框架,它是基于MVC程序結(jié)構(gòu)設(shè)計(jì)的。對(duì)于常年使用PHP語(yǔ)言做項(xiàng)目的人來(lái)說(shuō),laravel是普遍的首選方案。我以前接手的一些項(xiàng)目,云服務(wù)器平臺(tái)是客戶(hù)早年就在使用的,比如GoDaddy、Hostinger 等等,這些云平臺(tái)對(duì)PHP語(yǔ)言的支持非常好,那么考慮到入鄉(xiāng)隨俗,要使用云服務(wù)里的PHP環(huán)境,那么用laravel就是非常合適的了。

          laravel提供了權(quán)限管理、API 設(shè)計(jì)、后臺(tái)緩存、日志管理、測(cè)試等多種功能。它的文檔也非常的全面易懂。laravel 非常適合用來(lái)開(kāi)發(fā)博客網(wǎng)站、門(mén)戶(hù)網(wǎng)站、電商網(wǎng)站的后臺(tái)。

          不過(guò)時(shí)過(guò)境遷,由于現(xiàn)在更多更好的框架的出現(xiàn),PHP語(yǔ)言以及l(fā)aravel變得有些過(guò)時(shí)和年邁,很多人會(huì)暫時(shí)放棄PHP以及l(fā)aravel,會(huì)嘗試使用其他的選擇。

          Flask vs Django

          編程語(yǔ)言:Python

          我把這兩個(gè)框架放在一起進(jìn)行說(shuō)明。幾年前我在自學(xué)完P(guān)ython語(yǔ)言后,就去尋找基于Python的服務(wù)器開(kāi)發(fā)框架,flask和Django是兩個(gè)常用的。在玩過(guò)了這兩個(gè)框架之后,我明確的選擇了Flask。因?yàn)槲覀€(gè)人的開(kāi)發(fā)風(fēng)格和習(xí)慣是前后端分離的,用Angular或者Vue去專(zhuān)心開(kāi)發(fā)前端頁(yè)面,用框架細(xì)致的開(kāi)發(fā)后端服務(wù)器的一些功能,前后端之間的通信和數(shù)據(jù)交換使用 Restful API 來(lái)實(shí)現(xiàn)。

          Django也是一款比較強(qiáng)大的框架,但是它對(duì)前后端分離風(fēng)格的開(kāi)發(fā)者不太友好。在開(kāi)發(fā)的時(shí)候很多時(shí)候需要將前端的HTML、JavaScript和后端的Python進(jìn)行聯(lián)合開(kāi)發(fā),代碼可能會(huì)比較混亂。但是事情都有兩面性,反過(guò)來(lái)講Django的封裝性更好一些,很多功能都是拿來(lái)即用的,只要根據(jù)自己的需求稍加修改,就可以快速的實(shí)現(xiàn)一些功能,比如form表單。

          而 Flask 是純粹的前后端分離的風(fēng)格,屬于微型框架。你在用Flask寫(xiě)代碼的時(shí)候,可以完全不需要考慮前端??梢詫?zhuān)心的開(kāi)發(fā)服務(wù)器程序。最后提供一些 API 訪(fǎng)問(wèn)鏈接地址給前端即可。所以Flask 框架會(huì)比Django更小,使用flask也需要開(kāi)發(fā)者去處理和開(kāi)發(fā)更多的功能邏輯。

          Express.js vs Koa2

          編程語(yǔ)言:JavaScript / TypeScript

          得益于node.js的流行和廣泛使用,歷史悠久、可愛(ài)的JavaScript語(yǔ)言終于可以涉足到后臺(tái)服務(wù)器程序開(kāi)發(fā)領(lǐng)域了。一般的,在安裝好node.js后,很少有人會(huì)直接用JavaScript原生的開(kāi)發(fā)服務(wù)器代碼,而是會(huì)選擇一款框架。那么express.js和koa2就是目前比較流行的兩款框架了。

          他們都可以用 JS 快速的開(kāi)發(fā)出 API 程序,也都能通過(guò)安裝其他的模塊實(shí)現(xiàn)與后臺(tái)數(shù)據(jù)庫(kù)的連接。我個(gè)人在多年的編程經(jīng)歷中,面對(duì)中小型的項(xiàng)目,對(duì)性能要求不高的時(shí)候,都會(huì)考慮使用這兩個(gè)框架。一般會(huì)很快的寫(xiě)好 Restful API 程序和數(shù)據(jù)庫(kù)的CRUD程序。另外部他們兩個(gè)的部署也比較方便,Linux上裝好node.js,然后服務(wù)器程序文件放在一個(gè)地方,用 pm2 這種基于 node.js 的命令工具啟動(dòng)即可向前端提供服務(wù)了。

          這兩個(gè)框架其實(shí)是同一班人的作品。express.js問(wèn)世的較早,koa2其實(shí)是express.js的改進(jìn),代碼更加精煉緊湊,都是不錯(cuò)的選擇。

          Spring

          編程語(yǔ)言:Java

          聚光燈照顧來(lái),歡呼尖叫響起,superstar 到來(lái)了。沒(méi)錯(cuò),spring是這幾年服務(wù)器開(kāi)發(fā)框架里的明星。基于Java這幾十年的穩(wěn)健發(fā)展,已經(jīng)有了太多的處理各種問(wèn)題和需求的Java第三方包。再結(jié)合spring的優(yōu)良品質(zhì),比如常見(jiàn)的權(quán)限控制、Restful API 開(kāi)發(fā)、SQL/NoSQL 數(shù)據(jù)庫(kù)操作這種常見(jiàn)的功能以外,還可以想象一下利用spring結(jié)合hadoop生態(tài)來(lái)開(kāi)發(fā)big data 應(yīng)用,那會(huì)是另外一片天空了。

          我個(gè)人在2020年指導(dǎo)了幾個(gè)本科大學(xué)生的畢業(yè)設(shè)計(jì)項(xiàng)目。他們告訴我,他們的老師不僅要求他們寫(xiě)論文,還需要他們開(kāi)發(fā)一個(gè)完整的Web項(xiàng)目,要有網(wǎng)站、服務(wù)器,后面還要掛個(gè)數(shù)據(jù)庫(kù)。值得注意的一點(diǎn)是,導(dǎo)師們要求他們必須用spring框架實(shí)現(xiàn)服務(wù)器。這些學(xué)生當(dāng)然連前端三劍客 HTML/CSS/JavaScript 都還沒(méi)有玩會(huì),后臺(tái)抽象的代碼更是小白一個(gè)。他們說(shuō)導(dǎo)師也只是知道有這種技術(shù),但是也沒(méi)法完全指導(dǎo)他們,所以我就有了雪中送炭的機(jī)會(huì)。

          另外,現(xiàn)在很多中大型網(wǎng)站的后臺(tái)的主要業(yè)務(wù)邏輯,就是用java的spring來(lái)實(shí)現(xiàn)的,并結(jié)合其他技術(shù)向外提供服務(wù)。比如國(guó)內(nèi)的一些電商平臺(tái)就是這樣的設(shè)計(jì)。

          其他

          上面我只是列舉了幾個(gè)典型的方案,其實(shí)還有很多,我基本上都玩過(guò)。比如 hapi(JavaScript)、Golang(Go)、Slim(PHP)等等。大家可以根據(jù)自己的需求和實(shí)際情況,了解這些框架后進(jìn)行選擇。

          如何選擇合適的框架

          和擇偶很類(lèi)似,選擇適合的才是明智之選。大家都說(shuō)她好,包括你的父母都很欣賞那個(gè)人,但是你就是不喜歡。所以強(qiáng)扭的瓜不甜。下面是幾條選擇框架的方針,供大家參考:

          • 要明確自己開(kāi)發(fā)的服務(wù)器后臺(tái)的目的,以及將來(lái)的后臺(tái)的規(guī)模,數(shù)據(jù)量或業(yè)務(wù)量的大小,峰值是多少。拿著這些需求和目的,去和眾多的框架去對(duì)照,選擇能夠真正解決你的需求的框架。
          • 框架的安全性如何。畢竟服務(wù)器程序不是兒戲,前端其實(shí)只是個(gè)交互操作界面,大部分真正的數(shù)據(jù)和處理邏輯都在后臺(tái)服務(wù)器。我曾經(jīng)用了一個(gè)小時(shí),就很快的模仿開(kāi)發(fā)出了微信App的程序,但是這沒(méi)有什么可炫耀的,微信厲害的地方其實(shí)在它的后臺(tái)!
          • 隨著時(shí)間的推移,一般的,對(duì)于后臺(tái)服務(wù)器程序的訪(fǎng)問(wèn)量、數(shù)據(jù)流量、數(shù)據(jù)讀寫(xiě)的 I/O 效率都會(huì)有更高的要求。那么我們要仔細(xì)考慮一款框架的適應(yīng)性如何,是否能夠隨著業(yè)務(wù)的增長(zhǎng)同樣能夠提供相同的性能。
          • 易于部署、配置和維護(hù)。這時(shí)毋庸置疑的,我在以往的涉獵過(guò)程中,體驗(yàn)到了基于Go語(yǔ)言的后臺(tái)項(xiàng)目是最易于部署的,只要基于不同的OS(Windows,LInux)將代碼編譯好之后,直接放在操作系統(tǒng)里并啟動(dòng)即可。需要編譯的方案,運(yùn)行起來(lái)速度會(huì)更好,比如Java的框架。有些是不需要編譯,是解釋運(yùn)行的,比如JavaScript / node.js的框架,部署可能方便,但是運(yùn)行效率可能會(huì)有些折扣。不過(guò)由于現(xiàn)在的硬件機(jī)能已經(jīng)比20年前有了指數(shù)級(jí)的發(fā)展,所以在沒(méi)有特殊要求下,基本上哪個(gè)方便不麻煩就用哪個(gè)吧。
          • 開(kāi)發(fā)文檔的質(zhì)量?,F(xiàn)在很多人學(xué)習(xí)計(jì)算機(jī)還迷戀與哪一本書(shū),哪些視頻教程。在十幾年前倒是可以這樣考慮,因?yàn)橐郧盎ヂ?lián)網(wǎng)并不發(fā)達(dá),網(wǎng)速、內(nèi)容資源都比較差,買(mǎi)書(shū)學(xué)習(xí)就成了首選?,F(xiàn)在就不同了,現(xiàn)在你如果買(mǎi)了書(shū),可能書(shū)里的內(nèi)容可能很快就會(huì)過(guò)時(shí),就會(huì)和實(shí)際情況有了差距。有些人也會(huì)去報(bào)培訓(xùn)班,大家請(qǐng)擦亮眼睛,培訓(xùn)班也是要走流量的,公司要求一波學(xué)生必須在4~5個(gè)月結(jié)業(yè),如果時(shí)間太長(zhǎng),他們占用了教室、教師資源,公司就很難再繼續(xù)招收新的學(xué)生了,那么他們的現(xiàn)金流量就可想而知了。所以培訓(xùn)班的老師講課都是非常快的,非??贪宓?,他們每天都有進(jìn)度的要求。這樣填鴨式的教學(xué)效果我就不用多說(shuō)了。說(shuō)回來(lái),一款框架肯定都有他們自己的官方文檔,這幾年我還發(fā)現(xiàn)這些網(wǎng)站對(duì)中文的支持也很好了,以前基本上沒(méi)有中文版的官方開(kāi)發(fā)文檔。那么好好利用這些官方文檔來(lái)學(xué)習(xí)是最靠譜的。大家能自學(xué)就不要去請(qǐng)教別人,自己琢磨、鉆研、嘗試后得到的收獲對(duì)自己的技術(shù)更加有幫助,而且成本更低。
          • 學(xué)習(xí)曲線(xiàn)。也就是學(xué)習(xí)的難度和周期。這點(diǎn)就要和編程語(yǔ)言有所結(jié)合了,比如JavaScript、Python更加容易上手,Java稍微難一些復(fù)雜一些。這一點(diǎn)其實(shí)僅僅是針對(duì)初學(xué)者或者入行時(shí)間不長(zhǎng)的人的,像我這種已經(jīng)熟練掌握了至少4門(mén)語(yǔ)言,能玩轉(zhuǎn)10多門(mén)語(yǔ)言的人,學(xué)習(xí)曲線(xiàn)基本上可以不用考慮。
          • 社區(qū)。這一點(diǎn)也很可觀。一款框架用的人多,他們遇到的問(wèn)題也就會(huì)多,那么他們?cè)诰W(wǎng)絡(luò)上查詢(xún)問(wèn)題、詢(xún)問(wèn)問(wèn)題也就多,那么就會(huì)有更多的人給出各種問(wèn)題的解決方案來(lái)。慢慢的就形成了社區(qū),現(xiàn)在很多成型的編程社區(qū)網(wǎng)站就是這樣建立起來(lái)的。典型的就是 stackworkflow,我經(jīng)常能在這里找到靈感。個(gè)人意見(jiàn)啊,我建議讀者們但凡有一點(diǎn)英文能力,就去英文網(wǎng)站找解決方案。國(guó)內(nèi)的百度搜出來(lái)的結(jié)果一般都很爛,沒(méi)啥幫助,有些人就算給出方案也能看出來(lái)是敷衍的寫(xiě)的,要么語(yǔ)言表述不清,要么代碼胡亂粘貼。能翻墻就翻墻用Google,不能翻墻就用Microsoft bing(國(guó)際版),一般搜出來(lái)的都是國(guó)外網(wǎng)站,里面有很多有識(shí)之士給出的解答更加有幫助,甚至立竿見(jiàn)影。

          送給大家一句話(huà):

          擇偶時(shí),沒(méi)有最好的,只有合適的。選擇框架也是一樣的 !

          一個(gè)學(xué)期前小編也是對(duì)前端知之甚少,現(xiàn)在嘛,差不多弄懂了一些,來(lái)講講自己的理解吧ヽ( ̄▽?zhuān)?? 因?yàn)閷W(xué)習(xí)的深度不是很深,有錯(cuò)誤的地方歡迎指正~如果沒(méi)有學(xué)會(huì)建站,小編教你如何簡(jiǎn)單快速搭建網(wǎng)站,喜歡的收藏哦~~不要錯(cuò)過(guò)

          首先我們要知道訪(fǎng)問(wèn)網(wǎng)站的流程是什么?大家每天也訪(fǎng)問(wèn)。

          假設(shè)大家在瀏覽器地址欄輸入這個(gè)問(wèn)題的地址

          https://www.頭條.com/question/22689579


          HTML 與 CSS

          當(dāng)自己的電腦得到一個(gè) html頁(yè)面 (圖中HTTP 響應(yīng)中 body 里的內(nèi)容)之后,就會(huì)對(duì)它進(jìn)行解析。HTML 就是一種超文本標(biāo)記語(yǔ)言。給大家舉一些實(shí)例看看:

          • [img]圖片[/img] 用來(lái)粘貼圖片
          • [url]超鏈接[/url] 用來(lái)粘貼地址

          服務(wù)器返回給你的html文件,寫(xiě)的是一些代碼,大概是這樣的:

          瀏覽器拿到這些代碼之后,將分析渲染好頁(yè)面顯示出來(lái),如果不用css,效果如下圖,按照瀏覽器默認(rèn)的樣式顯示出表格,超鏈接等。

          大家有么有覺(jué)得默認(rèn)樣式有點(diǎn)ε(┬┬﹏┬┬)3……所以很多情況我們需要自定義這些樣式,目前通用的樣式語(yǔ)言就是CSS,我們用CSS寫(xiě)一些自定義樣式的代碼,之后在 HTML 文件里用一個(gè)<link>標(biāo)簽把這些規(guī)定樣式的 CSS 與表達(dá)內(nèi)容語(yǔ)義的 HTML 代碼鏈接起來(lái),然后大家就能看到以往所謂的正常的頁(yè)面,是不是很厲害呢~~~


          CSS 代碼的基本格式

          屬性:值

          比如頭條的分布框架排版,它的 CSS ,截圖大體如下

          把第一個(gè)屬性對(duì)應(yīng)的代碼翻譯一下的話(huà),背景圖像位置偏移量(background - position)在圖像距離頁(yè)面內(nèi)左上角水平1px垂直2px處,瀏覽器會(huì)規(guī)規(guī)矩矩的地實(shí)現(xiàn)代碼要求的效果,所以當(dāng)大家在頁(yè)面上下滾動(dòng)時(shí),頂上那個(gè)導(dǎo)航條都會(huì)牢牢地黏在窗口頂部固定的位置,不發(fā)生偏移。

          再講講其他幾個(gè)屬性解釋一下:

          • left 為240px 說(shuō)明這個(gè)模塊需緊貼著窗口的左240px處

          • width 和 height 指定模塊的寬和高

          • border 指明這個(gè)模塊的邊界范圍

          換句話(huà)說(shuō),就是瀏覽器就會(huì)根據(jù)這些 CSS 代碼,自動(dòng)描繪出對(duì)應(yīng)的樣式。


          HTML 5 與 XHTML

          像語(yǔ)言一樣,大家在網(wǎng)頁(yè)里的 發(fā)現(xiàn)的HTML 代碼也不一定是標(biāo)準(zhǔn)的,就好比有時(shí)候發(fā)音不太標(biāo)準(zhǔn),別人就會(huì)去猜測(cè)你說(shuō)的是什么一樣,sometimes,程序猿不小心寫(xiě)錯(cuò)了一個(gè) HTML代碼,瀏覽器也會(huì)試圖猜測(cè)這些人類(lèi)原來(lái)到底想寫(xiě)什么,之后做出對(duì)應(yīng)的處理,而這里的猜是要有一個(gè)常識(shí)做依據(jù)的。加上有些瀏覽器的功能不一,有的支持一些標(biāo)簽,有一些又不支持,還有一些混亂的情況。

          為了防止大家混淆,我們要對(duì) HTML 代碼里的標(biāo)簽,標(biāo)簽how寫(xiě),標(biāo)簽可以hava屬性這些東西,建立一個(gè)符合的標(biāo)準(zhǔn),HTML5 就是其中一個(gè)比較新的標(biāo)準(zhǔn)。其中新加了很多可以用的標(biāo)簽和屬性,然后各大瀏覽器也大刀闊斧的按這個(gè)標(biāo)準(zhǔn)去實(shí)現(xiàn)了很多新標(biāo)簽和屬性。

          本來(lái)前端程序員要寫(xiě)一堆代碼去實(shí)現(xiàn)的效果,現(xiàn)在瀏覽器都給實(shí)現(xiàn)了,只需程序猿寫(xiě)兩三行,調(diào)用一下瀏覽器就給搞定了,十分簡(jiǎn)單,所以很多人都愿意去推廣這個(gè)標(biāo)準(zhǔn)~(當(dāng)然新標(biāo)準(zhǔn)也不可能是完美的,也會(huì)有一些問(wèn)題,有興趣的朋友可以去查查)

          至于 XHTML,就是 HTML 的表親,XML 和 HTML 自己的雜交系列,對(duì)語(yǔ)法要求十分的嚴(yán)格,為了兼容 XML,在語(yǔ)法上與 HTML 有一些不同。


          JavaScript 與瀏覽器腳本

          有了表示內(nèi)容和語(yǔ)義的 HTML,規(guī)定樣式的 CSS,得到的是靜態(tài)的頁(yè)面,沒(méi)什么動(dòng)畫(huà),雖然用 CSS 可以有一些動(dòng)畫(huà),需要刷新數(shù)據(jù)才可以,這么呆板單調(diào)的網(wǎng)頁(yè)怎么能展現(xiàn)我大智人種族的創(chuàng)造性!于是我們創(chuàng)造了 Javascript(JS) 來(lái)給頁(yè)面添加一些動(dòng)態(tài)的效果,比如頭條的發(fā)表的標(biāo)簽,鼠標(biāo)移上去會(huì)彈出一個(gè)小窗口,這個(gè)就是 JS 實(shí)現(xiàn)的效果啦。

          瀏覽器都會(huì)幫大家實(shí)現(xiàn)一些Javascript可以用的工具(函數(shù),對(duì)象等),只要寫(xiě)一些 JS 的代碼,保存在 xxx.js 里,在 html 文件中用 <script> 關(guān)聯(lián)進(jìn)來(lái)就可以用了,像上圖這個(gè)效果應(yīng)該就包括了

          1. 鼠標(biāo)懸停到標(biāo)簽上時(shí)創(chuàng)建一個(gè)新的 <div> 小窗口

          2. 用 JS 向頭條服務(wù)器發(fā)送一個(gè)請(qǐng)求,得到這個(gè)小窗口應(yīng)該顯示的數(shù)據(jù),放在這個(gè)小窗口里(這就是所謂的AJAX,不用刷新就能與服務(wù)器進(jìn)行交互,更新頁(yè)面的一小部分~)

          瀏覽器拿到這樣的代碼,就會(huì)解析并實(shí)現(xiàn)出相應(yīng)的效果。其實(shí)用來(lái)寫(xiě)瀏覽器腳本的,也不是非得JavaScript 不可,不過(guò)是各大瀏覽器都默認(rèn)了:請(qǐng)用 JS 寫(xiě)這些動(dòng)態(tài)效果的代碼給我解析~


          以上就是前端部分的內(nèi)容,下面簡(jiǎn)述一下后端的東西吧> <

          Web Server 和 Web Services

          瀏覽器給服務(wù)器發(fā)一個(gè)請(qǐng)求,服務(wù)器不是一看就知道怎么響應(yīng)的。首先這些請(qǐng)求和響應(yīng)要有一個(gè)通用的寫(xiě)法,也就是要有一個(gè)協(xié)議,常用的是 HTTP 協(xié)議。

          像最前面的圖,服務(wù)器的響應(yīng)寫(xiě)了一個(gè)狀態(tài)碼 200 OK ,是 HTTP 協(xié)議里約定俗成的一個(gè)東西,服務(wù)器寫(xiě) 200 OK 在響應(yīng)里,表示“你請(qǐng)求的這個(gè)東西我有”,如果是404 Not Found,就是“你請(qǐng)求的這個(gè)東西我這里沒(méi)有”。

          HTTP 響應(yīng)里還包括很多東西,比如 Content-type 表示服務(wù)器發(fā)過(guò)來(lái)的文件類(lèi)型是什么(文本?動(dòng)畫(huà)?圖片?音頻?),這樣發(fā)過(guò)去了人家瀏覽器好知道怎么展示給用戶(hù)看。人家服務(wù)器怎么知道按協(xié)議要寫(xiě)什么東西進(jìn)去呢,這就是 Web Server 干活的時(shí)候了。

          形象化一下HTTP響應(yīng),大概就長(zhǎng)這樣:

          再上個(gè)錘子,瀏覽器和服務(wù)器之間請(qǐng)求響應(yīng)的過(guò)程大致是長(zhǎng)這樣的,右下角的那些東西就是由 Web Server 生成的(服務(wù)器腳本可以做一些改動(dòng),但這些一般是 Web Server 的份內(nèi)活):

          再比如說(shuō)很多時(shí)候你訪(fǎng)問(wèn)一個(gè)網(wǎng)站,瀏覽器里輸?shù)牡刂凡](méi)有寫(xiě)明你請(qǐng)求的文件,比如這個(gè)問(wèn)題的地址是:

          http://www.頭條.com/question/22689579

          但頭條的服務(wù)器其實(shí)返回了一個(gè)html給你,服務(wù)器怎么知道這個(gè)地址對(duì)應(yīng)要返回什么樣的 html 代碼給你的?也是 Web Server 干的活。

          除了瀏覽器輸?shù)刂非没剀?chē)這種赤裸裸的訪(fǎng)問(wèn),客戶(hù)端與服務(wù)器的交互還有很多種,比如:

          • 前面提到的用 JS 完成的 AJAX,有點(diǎn)像瀏覽器和服務(wù)器之間的悄悄話(huà)~

          還有其他應(yīng)用軟件與服務(wù)器的交互,比如:

          • 微信、QQ 與騰訊的服務(wù)器的交互

          • 網(wǎng)游客戶(hù)端與網(wǎng)游公司服務(wù)器的交互

          • 搜索引擎用來(lái)搜集網(wǎng)頁(yè)信息的程序(爬蟲(chóng))與各種各樣的網(wǎng)站服務(wù)器的交互

          • 只要你知道用什么地址訪(fǎng)問(wèn)、怎樣訪(fǎng)問(wèn)人家的服務(wù)器,并且有相應(yīng)權(quán)限,你也可以自己寫(xiě)一些程序去和他們的服務(wù)器交互(比如用微博API - 新浪微博API獲取微博,開(kāi)發(fā)第三方應(yīng)用或者做數(shù)據(jù)分析)。

          從這些例子里可以看出,客戶(hù)端與服務(wù)器的交互的主體、客體、載體是五花八門(mén)的:

          • 服務(wù)器可以是大型機(jī)也可以是個(gè)人電腦,只要能跑相應(yīng)的程序就行

          • 客戶(hù)端像前面舉的栗子里一樣,可以是各種軟件,而且這些軟件不一定運(yùn)行在個(gè)人電腦上,也可以是手機(jī)、平板、智能穿戴設(shè)備等等

          • 有時(shí)候不是傳生成好的 HTML 或者其他服務(wù)器上已經(jīng)有的文件,而是傳輸經(jīng)過(guò)一定邏輯處理后生成的字符串或者其他各種封裝好的數(shù)據(jù)

          像前面提到的 HTML 需要有一定標(biāo)準(zhǔn)一樣,為了防止混亂和雞同鴨講,我們又需要先對(duì)這些機(jī)器需要怎么交互達(dá)成一定共識(shí),再讓它們進(jìn)行交流。人與人之間通信,需要先有一種大家都認(rèn)識(shí)的寫(xiě)法(比如簡(jiǎn)體字/繁體字)和一種彼此都懂的語(yǔ)言(比如普通話(huà)/廣東話(huà))。

          要讓這些形形色色的機(jī)器能夠通過(guò)網(wǎng)絡(luò)進(jìn)行交互,我們就需要指明一種協(xié)議(比如 HTTP/HTTPS)和一種數(shù)據(jù)封裝格式(比如 HTML/XML),Web Server 提供的 Web Service,指的就是這種協(xié)議+格式的交流體系。不過(guò) Web Service 的生態(tài)系統(tǒng)和 HTML 的標(biāo)準(zhǔn)不一樣,用戶(hù)可以選擇的協(xié)議和數(shù)據(jù)封裝格式更多,普通的網(wǎng)站訪(fǎng)問(wèn)用的 HTTP + HTML 只是其中一種,一些封閉系統(tǒng)內(nèi)的交流還可以自己定義一個(gè)協(xié)議和格式來(lái)用(比如 QQ)。

          Web Service 傳輸?shù)臄?shù)據(jù)再經(jīng)由本地客戶(hù)端(瀏覽器、QQ/微信,網(wǎng)游客戶(hù)端等)的分析渲染,就能夠以普通人能夠理解的形式展現(xiàn)出來(lái)。此外還有一些 Web Service 并不是為普通用戶(hù)設(shè)計(jì)的,像前面提到的微博API,是用來(lái)給程序猿進(jìn)行二次開(kāi)發(fā)的~

          除了提供 Web Service, Web Server 還會(huì)兼顧很多功能,包括提供緩存,平衡負(fù)載,這樣在訪(fǎng)問(wèn)量比較大的時(shí)候能有有條不紊地接客。常見(jiàn)的現(xiàn)成的 Web Server 有開(kāi)源的 Apache、Nginx和微軟的IIS,你也可以用一些工具(比如 Node.js )自己定制一個(gè)。因?yàn)?Web Server 需要比較好的性能,所以投產(chǎn)時(shí)用的 Web Server 通常是C/C++/Java寫(xiě)的,但是其實(shí)很多語(yǔ)言都可以寫(xiě),而且配合上語(yǔ)言底層的優(yōu)化和好的模型,其他語(yǔ)言寫(xiě)的 Web Server也可以有不錯(cuò)的表現(xiàn)。

          PHP ,服務(wù)器腳本,Web Framework

          開(kāi)頭那張圖里服務(wù)器接到請(qǐng)求之后可以給訪(fǎng)客發(fā)送對(duì)應(yīng)的文件,但21世紀(jì)的服務(wù)器怎么可能只會(huì)“接請(qǐng)求-發(fā)文件”這么弱智的一招呢,人家還可以處理你上傳來(lái)的文件的!還可以接受你發(fā)過(guò)來(lái)的各種請(qǐng)求,去操作服務(wù)器本地的文件or數(shù)據(jù)庫(kù)的!要干這些事,自然服務(wù)器那邊也少不了要有代碼了,這些代碼就是服務(wù)器腳本。前面說(shuō)的 Web Service 傳輸?shù)臄?shù)據(jù),主要也是由服務(wù)器腳本生成,再交由 Web Server ,按照某種協(xié)議套好整個(gè)響應(yīng)的格式,返回給客戶(hù)端的。

          同一個(gè)網(wǎng)址,每個(gè)人看到的頁(yè)面不一定是一樣的,比如頭條的網(wǎng)址都是

          http://www.toutiao.com/

          但是沒(méi)登陸和登陸之后看到的東西不一樣,登陸之后每個(gè)人看到的導(dǎo)航欄的用戶(hù)信息,關(guān)注的動(dòng)態(tài),都不一樣。服務(wù)器腳本可以對(duì)這些不同的狀態(tài),生成不同的頁(yè)面,交給 Web Server 返回給瀏覽器。

          知乎的主頁(yè)給大家看到的 html 整體來(lái)說(shuō)是差不多的,都有導(dǎo)航欄,左邊是關(guān)注的動(dòng)態(tài),右邊是廣告和邊欄,每一塊的整體構(gòu)造大同小異,只是一些地方內(nèi)容有所區(qū)別。服務(wù)器腳本就是利用已知的數(shù)據(jù),在這些因人而異的地方填入相應(yīng)的內(nèi)容,生成給每個(gè)人看的頁(yè)面。

          比如我的主頁(yè),導(dǎo)航欄右邊的頭像和名字跟別人看到的不一樣,就是因?yàn)檫@塊地方有一個(gè)放圖片的<img>標(biāo)簽和一個(gè)寫(xiě)名字的<span>標(biāo)簽,服務(wù)器腳本在查詢(xún)本地的數(shù)據(jù)之后給我返回的頁(yè)面里<img>的標(biāo)簽填了我頭像的圖片鏈接,<span>標(biāo)簽里填了我的頭條名,給別人的頁(yè)面就填其他鏈接、其他名字,這樣每個(gè)人看到的頁(yè)面就不一樣了。

          PHP 就是一種常見(jiàn)的用來(lái)寫(xiě)服務(wù)器腳本的語(yǔ)言,其實(shí)只要是能拿來(lái)寫(xiě)大家傳輸數(shù)據(jù)的通用接口(CGI)的語(yǔ)言都可以用來(lái)寫(xiě)服務(wù)器腳本(也就是說(shuō)幾乎所有編程語(yǔ)言都可以寫(xiě) = =b),只是因?yàn)楝F(xiàn)成工具的豐富程度和專(zhuān)攻程度不一樣,所以有一些語(yǔ)言在寫(xiě)服務(wù)器端腳本的時(shí)候會(huì)比較熱門(mén)。

          為了方便,我們?cè)趯?xiě)服務(wù)器腳本的時(shí)候,通常還會(huì)用個(gè)同語(yǔ)言寫(xiě)的 Web Framework 來(lái)處理各種細(xì)節(jié),防御一些常見(jiàn)的攻擊,提供跨站認(rèn)證(比如用已有的微博賬號(hào)注冊(cè)其他網(wǎng)站)的接口,利用cookie處理登陸狀態(tài)和用戶(hù)設(shè)置,生成網(wǎng)頁(yè)模版之類(lèi)的。如果你用 C# 或者 Visual Basic 寫(xiě)服務(wù)器腳本,就可以用 http://ASP.NET 這個(gè)框架實(shí)現(xiàn)這些功能,幫你省點(diǎn)麻煩。不過(guò)現(xiàn)在不少人是反過(guò)來(lái)為了一個(gè)好用的 Web Framework 去選擇它對(duì)應(yīng)的服務(wù)器腳本語(yǔ)言的。

          一個(gè)普通網(wǎng)站訪(fǎng)問(wèn)的過(guò)程

          簡(jiǎn)單概括一下,對(duì)于我們普通的網(wǎng)站訪(fǎng)問(wèn),涉及到的技術(shù)就是:

          1. 用戶(hù)操作瀏覽器訪(fǎng)問(wèn),瀏覽器向服務(wù)器發(fā)出一個(gè) HTTP 請(qǐng)求;

          2. 服務(wù)器接收到 HTTP 請(qǐng)求,Web Server 進(jìn)行相應(yīng)的初步處理,使用服務(wù)器腳本生成頁(yè)面;

          3. 服務(wù)器腳本(利用Web Framework)調(diào)用本地和客戶(hù)端傳來(lái)的數(shù)據(jù),生成頁(yè)面;

          4. Web Server 將生成的頁(yè)面作為 HTTP 響應(yīng)的 body,根據(jù)不同的處理結(jié)果生成 HTTP header,發(fā)回給客戶(hù)端;

          5. 客戶(hù)端(瀏覽器)接收到 HTTP 響應(yīng),通常第一個(gè)請(qǐng)求得到的 HTTP 響應(yīng)的 body 里是 HTML 代碼,于是對(duì) HTML 代碼開(kāi)始解析;

          6. 解析過(guò)程中遇到引用的服務(wù)器上的資源(額外的 CSS、JS代碼,圖片、音視頻,附件等),再向 Web Server 發(fā)送請(qǐng)求,Web Server 找到對(duì)應(yīng)的文件,發(fā)送回來(lái);

          7. 瀏覽器解析 HTML 包含的內(nèi)容,用得到的 CSS 代碼進(jìn)行外觀上的進(jìn)一步渲染,JS 代碼也可能會(huì)對(duì)外觀進(jìn)行一定的處理;

          8. 用戶(hù)與頁(yè)面交互(點(diǎn)擊,懸停等等)時(shí),JS 代碼對(duì)此作出一定的反應(yīng),添加特效與動(dòng)畫(huà);

          9. 交互的過(guò)程中可能需要向服務(wù)器索取或提交額外的數(shù)據(jù)(局部的刷新,類(lèi)似微博的新消息通知),一般不是跳轉(zhuǎn)就是通過(guò) JS 代碼(響應(yīng)某個(gè)動(dòng)作或者定時(shí))向 Web Server 發(fā)送請(qǐng)求,Web Server 再用服務(wù)器腳本進(jìn)行處理(生成資源or寫(xiě)入數(shù)據(jù)之類(lèi)的),把資源返回給客戶(hù)端,客戶(hù)端用得到的資源來(lái)實(shí)現(xiàn)動(dòng)態(tài)效果或其他改變。

          注意這只是小網(wǎng)站里比較常見(jiàn)的模型,大網(wǎng)站為了解決規(guī)模問(wèn)題還會(huì)有很多處理,每個(gè)環(huán)節(jié)都會(huì)有一些細(xì)微的差異,中間還會(huì)使用各種各樣的工具減輕服務(wù)器的壓力,提高效率,方便日常維護(hù)~

          延伸閱讀 —— 那些看花眼的名詞

          為了方便調(diào)試,很多 Web Framework 會(huì)自帶一個(gè)簡(jiǎn)單的 Web Server,或者有些 Web Server 會(huì)自帶一個(gè)簡(jiǎn)單的 Web Framework ,實(shí)際部署到服務(wù)器上開(kāi)放使用的時(shí)候?yàn)榱诵阅芑蛘甙踩榷喾矫娴目紤],可以把內(nèi)置的 Web Server 換成其他的,比如 Apache 或者 Nginx (舉個(gè)栗子,知乎用的是 Tornado 做 Framework,Server 換成了 Nginx,見(jiàn)知乎使用了哪些框架和開(kāi)源庫(kù)?)。如果是開(kāi)源的東西,還可以在遵守開(kāi)源協(xié)議的前提下自己改一下再用~

          因?yàn)楹蠖瞬幌袂岸艘呀?jīng)有 HTML + CSS + JS 這樣的既定事實(shí)標(biāo)準(zhǔn),服務(wù)器腳本與 Web Framework 的選擇很多,所以新手會(huì)聽(tīng)到很多眼花繚亂的技術(shù)名詞的地方多在這里~ 舉一些栗子,早年常見(jiàn)的服務(wù)器端語(yǔ)言有:

          • 開(kāi)源的 PHP

          • Sun 公司的 JSP 中使用的 Java

          • 微軟的 ASP 中使用的 VBScript

          現(xiàn)在在這方面的應(yīng)用熱起來(lái)的語(yǔ)言有

          • Python,對(duì)應(yīng)常見(jiàn)的 Framework 包括知乎和Quora有用到的 Tornado(其實(shí)是自帶 Framework 的 Web Server),社區(qū)很成熟的 Django (用戶(hù)包括 Instagram、Pinterest)等

          • Ruby,一般都用 Rails 這個(gè) Framework,用戶(hù)包括 Github、早期的 Twitter 等

          • 逆天的 JavaScript,有了 Node.js 這個(gè)平臺(tái),Web Server、服務(wù)器腳本和瀏覽器腳本全都可以用 JavaScript 來(lái)寫(xiě)……Node.js上最常用的 Framework是Express

          • 微軟家的則跟著 http://ASP.NET 轉(zhuǎn)移到了C# 或者 Visual Basic

          • Erlang,擅長(zhǎng)大規(guī)模的并發(fā),不少游戲公司拿來(lái)寫(xiě)服務(wù)器,靠幾十個(gè)工程師支撐幾億用戶(hù)的WhatsApp也是用的這個(gè)~

          幾種常見(jiàn)的架構(gòu)包括:

          • LAMP = Linux + Apache + MySQL + PHP(P還可能是Python或Perl。有時(shí)候L會(huì)改成W=Windows。),也就是服務(wù)器上的操作系統(tǒng)是 Linux,Web Server 用 Apache,數(shù)據(jù)庫(kù)用 MySQL,服務(wù)器腳本用 PHP,這些都是開(kāi)源技術(shù),網(wǎng)站起步時(shí)用起來(lái)的成本會(huì)比較低,所以是普通網(wǎng)站里非常常見(jiàn)的架構(gòu)(雖然對(duì)于發(fā)展得很大的網(wǎng)站會(huì)遇到很多瓶頸),F(xiàn)acebook就是這種,淘寶也曾經(jīng)是。

          • J2EE,Java 世界的架構(gòu),通常是企業(yè)用的(銀行、大型公司,.etc),比較常見(jiàn)地還會(huì)搭配一種 UNIX 做操作系統(tǒng),Apache 做 Web Server,Tomcat 轉(zhuǎn)換 JSP 到 Java 給服務(wù)器程序用(其實(shí)它也自帶 Web Server),Oracle 數(shù)據(jù)庫(kù)等等。不一定拿來(lái)建站,常常用來(lái)提供企業(yè)里的各種需要用到網(wǎng)絡(luò)的業(yè)務(wù)。我們學(xué)校教務(wù)系統(tǒng)就是用J2EE做的=。= 淘寶現(xiàn)在也是從LAMP轉(zhuǎn)型到了這個(gè)。關(guān)于tomcat等之前的文章也有提及環(huán)境的配置。

          • http://ASP.NET,微軟家的架構(gòu),通常會(huì)搭配 Windows Server 操作系統(tǒng),SQL Server 數(shù)據(jù)庫(kù),IIS 做 Web Server。StackOverflow和京東(曾經(jīng))就是這個(gè)架構(gòu)。

          • 神奇的MEAN架構(gòu),MongoDB做數(shù)據(jù)庫(kù),Express做 Web Framework,Angular 做前端的 JavaScript 框架,Node.js 用于編寫(xiě) Web Server。神奇之處在于這幾個(gè)東西的語(yǔ)言都是 JavaScript (MongoDB的實(shí)現(xiàn)不是,但與外界溝通用的語(yǔ)言是)。因?yàn)槭潜容^新的架構(gòu),還有待時(shí)間的考驗(yàn),不過(guò)被很多人(尤其是靠 JavaScript 吃飯的前端程序猿們)熱切關(guān)注。

          • 一般來(lái)說(shuō)重點(diǎn)不在技術(shù)而且在乎成本的新網(wǎng)站比較喜歡用 LAMP,重視安全穩(wěn)定和速度的企業(yè)和機(jī)構(gòu)喜歡 J2EE,想省事的網(wǎng)站喜歡 http://ASP.NET,比較 Geek 的網(wǎng)站和創(chuàng)業(yè)公司喜歡折騰各種 Python、Ruby、Node.js世界的東西,Google 這樣現(xiàn)成的技術(shù)都解決不了需求的超大型網(wǎng)站就自己折騰解決方案。

          雖然可以用的語(yǔ)言和所屬體系五花八門(mén),其實(shí)服務(wù)器端程序要做的事情本質(zhì)上都差不多的,就好比自然世界中要表達(dá)“吃過(guò)了沒(méi)”這句話(huà)的意思,你可以用各種各樣的語(yǔ)言在各種各樣的場(chǎng)景里表達(dá)出來(lái)~

          如果大家喜歡,歡迎收藏,多多關(guān)注小編吶~ 還有會(huì)更多精彩的分享

          家好, 我是可愛(ài)的排骨

          目錄一. speedtest 簡(jiǎn)介.
          二. 安裝到 Windows. 難度 ★★
          三. 安裝到 Linux. 難度 ★★★★★
          四. 安裝到 群暉 DSM. 難度 ★
          五. 使用 Docker 鏡像部署. 難度 ★★★
          六. 總結(jié)

          一. speedtest 簡(jiǎn)介.

          1. 作者簡(jiǎn)介.

          喝井不忘挖水人, speedtest 的作者不是排骨, 是下面這位.

          speedtest 是由意大利的一位90后愛(ài)打游戲愛(ài)跳舞機(jī)的逗B碼農(nóng) Federico Dossena (見(jiàn)下圖) 發(fā)布的一個(gè)開(kāi)源項(xiàng)目 (https://github.com/adolfintel/speedtest).

          2. 原理簡(jiǎn)介

          speedtest 以 HTML 和 JavaScript 為主, 利用客戶(hù)端的瀏覽器通過(guò)上傳和下載垃圾數(shù)據(jù)來(lái)測(cè)試 HTTP 傳輸速度, 和大家常用的 speedtest.net 差不多.

          speedtest 使用任意操作系統(tǒng)上的任意 Web 服務(wù)器作為服務(wù)端, 所以理論上它支持 Windows/MacOS/Linux/Unix 等系統(tǒng), IIS/Nginx/Apache/lighttpd 等服務(wù)器.

          任意瀏覽器作為客戶(hù)端如 Chrome/Firefox/IE11/Edge/Safari/Opera?

          speedtest 默認(rèn)使用 PHP 作為服務(wù)端, 目前也有 node.js 版本, 也可以只用純靜態(tài)服務(wù)器.

          本文所說(shuō)的 speedtestOokla 公司的 speedtest.net相關(guān)測(cè)速 app 沒(méi)有任何關(guān)系, 沒(méi)何關(guān), 沒(méi)關(guān), 沒(méi).

          **二. 安裝到 Windows. 難度 **★★

          在 Windows 上安裝 speedtest 應(yīng)該是絕大多數(shù)普通用戶(hù), 為了照顧沒(méi)有相關(guān)經(jīng)驗(yàn)的用戶(hù), 這里排骨寫(xiě)的步驟較多較細(xì), 但是已經(jīng)最大化的精簡(jiǎn)了.

          本文以 Windows 10 為例, Windows 7 也適用, 不過(guò)某些地方有不同, 排骨會(huì)注明.

          1. 安裝 IIS 服務(wù)器.

          使用 Win+R 打開(kāi)運(yùn)行窗口, 輸入 **OptionalFeatures **打開(kāi) Windows 功能.

          必須選擇 IIS 管理控制臺(tái)/靜態(tài)內(nèi)容/默認(rèn)文檔/CGI 4個(gè)選項(xiàng). 默認(rèn)文檔不是必需的.

          2. 下載并安裝 PHP Manager for IIS.

          PHP Manager for IIS 是微軟官方推薦的一個(gè) IIS 插件, 可以最大化的簡(jiǎn)化 IIS 上配置 PHP 的過(guò)程. 如果不用這個(gè)插件, 在 Windows 上配置 PHP 會(huì)比 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 提示, 請(qǐng)按上面的圖繼續(xù).

          安裝過(guò)程就是一路 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 命令掃開(kāi) IIS 管理器.

          打開(kāi) PHP Manager.

          通過(guò) “Register new PHP version” 設(shè)置 PHP 引用路徑.

          上一次我們把 PHP 的文件解壓到了 F:\php.

          使用 Check phpinfo() 測(cè)試 PHP 配置是否成功.

          如果看到這個(gè)紫色頁(yè)面, 就說(shuō)明 PHP 配置成功了.

          5. 下載 speedtest 包并解壓.

          speedtest 包下載: https://github.com/adolfintel/speedtest/archive/4.5.5.zip

          解壓到 C:\inetpub\wwwroot, 熟悉 IIS 配置的用戶(hù)可以解壓到其它地方.

          注意所有文件都在壓縮包里的子目錄中!

          6. 測(cè)試 speedtest.

          用瀏覽器 (推薦 Chrome) 訪(fǎng)問(wèn) http://localhost/example-pretty.html. 如果出現(xiàn)下圖這樣的測(cè)試結(jié)果則表達(dá) speedtest 運(yùn)行成功.

          7. 防火墻開(kāi)啟入站 80 端口.

          這一步是可選的. 如果內(nèi)網(wǎng)的其它電腦或手機(jī)無(wú)法訪(fǎng)問(wèn)這臺(tái) Windows 上的 speedtest, 可能是被 Windows 防火墻擋了.

          將 Windows 入站端口 80 打開(kāi)后, 內(nèi)網(wǎng)的其它設(shè)備才能訪(fǎng)問(wèn)剛剛安裝好的 speedtest.

          以管理員身份運(yùn)行 cmd 打開(kāi)命令行窗口. 使用下面的命令行給防火墻開(kāi)啟 80 端口.

          netsh advfirewall firewall add rule name=“speedtest” dir=in action=allow protocol=TCP localport=80

          Win7命令為

          netsh firewall add portopening TCP 80 “speedtest”

          最后用手機(jī)或其它電腦訪(fǎng)問(wèn) http://192.168.1.91/example-pretty.html 開(kāi)始測(cè)速吧 (假設(shè)安裝 speedtest 的電腦 IP 為 192.168.1.91).

          **三. 安裝到 Linux. 難度 **★★★★★

          一般用戶(hù)家中沒(méi)有 Linux 電腦, 不過(guò)排骨考慮到使用 OMV 等系統(tǒng)作 NAS 的用戶(hù)和自購(gòu)有 VPS 的用戶(hù), 順便也寫(xiě)一下 Linux 上安裝 speedtest的步驟. 用 Linux 系統(tǒng)的用戶(hù)基礎(chǔ)都不會(huì)太菜吧?

          下面 ubuntu 18.04 為例, 其它 Linux 版本的用戶(hù)請(qǐng)自行調(diào)整.

          1. 安裝 nginx 和 php-fpm

          sudo apt install nginx php-fpm

          2. 修改 nginx 站點(diǎn)配置

          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. 防火墻開(kāi)啟入站 80 端口

          這步也是可選的.

          sudo ufw allow 80

          安裝配置完成. 開(kāi)始測(cè)速吧!

          **四. 安裝到 群暉 DSM. 難度 **★★

          在群暉系統(tǒng)上安裝 speedtest 是個(gè)非常好的選擇, 也是最簡(jiǎn)單的方案. 與 Linux 上安裝 speedtest 類(lèi)似, 群暉的管理系統(tǒng)本身就是基于 Linux 和 nginx 的.

          1. 下載 speedtest 并上傳到群暉.

          speedtest 包下載: https://github.com/adolfintel/speedtest/archive/4.5.5.zip

          將 speedtest 包中的文件上傳到群暉共享文件夾的某個(gè)目錄, 如下圖

          2. 安裝 Web Station 和 PHP 7.0.

          從群暉套件中心可以找到, PHP 7.0 可能在安裝 Photo Station 時(shí)一并安裝好了.

          3. 設(shè)置 PHP 和 虛擬主機(jī).

          打開(kāi) Web Station 套件, 選擇 PHP 設(shè)置, 編輯默認(rèn)PHP配件文件. 勾選 openssl.

          選擇 虛擬主機(jī), 點(diǎn)擊 新增, 然后按下圖配置虛擬主機(jī). 其中 端口文檔根目錄 按實(shí)際情況設(shè)置.

          安裝配置完成. 開(kāi)始測(cè)速吧!

          **五. 使用 Docker 鏡像部署. 難度 **★★★

          用 Docker 部署 speedtest 是最簡(jiǎn)易快速的方法, 但是對(duì)用戶(hù)來(lái)說(shuō)起點(diǎn)也是最高的.

          排骨專(zhuān)門(mén)給 speedtest 制作了 Docker 鏡像 (6MB), 比原作者的鏡像 (158MB) 小很多很多很多.

          1. 下載 speedtest 鏡像.

          docker pull cuteribs/speedtest

          2. 創(chuàng)建 speedtest 容器.

          docker run -d --name speedtest -p 80:80 cuteribs/speedtest

          安裝配置完成. 開(kāi)始測(cè)速吧! 2行命令就搞定了, 是不是簡(jiǎn)單得要死而絕大多數(shù)人又不會(huì)?

          六. 總結(jié)

          按上面任一方法搭建好 speedtest 服務(wù)器后, 就可以愉快的測(cè)速了.

          不論是測(cè)內(nèi)網(wǎng)還是外網(wǎng)

          不論是測(cè) 路由器, AP, 網(wǎng)卡還是VPS

          不論是測(cè) 有線(xiàn) NAT, 2.4G/5G WiFi 還是 SS等軟件轉(zhuǎn)發(fā)

          只要打開(kāi)瀏覽器, 輸入 speedtest 地址就行了.

          speedtest 測(cè)速的優(yōu)點(diǎn):

          1. 測(cè)試簡(jiǎn)單暴力. 瀏覽器就能測(cè), 無(wú)需別裝 app.
          2. 界面簡(jiǎn)潔明了. 直觀且無(wú)廣告不收費(fèi).
          3. 上行下行兼顧. 不用雙向測(cè)試, 不像 iperf3 只能單向.

          speedtest 測(cè)速的缺點(diǎn):

          1. 用戶(hù)技能要求. 需要自己安裝測(cè)速服務(wù)器, 希望本貼能解決這個(gè)問(wèn)題.
          2. 測(cè)速協(xié)議片面. 基于 HTTP 協(xié)議測(cè)速, 有些片面. 不過(guò)95%的用戶(hù)有90%的網(wǎng)絡(luò)使用都是 HTTP. (純瞎說(shuō)的 哈~)
          3. 性能瓶頸要求. 因?yàn)榛?Web 服務(wù)器和 JavaScript, 所以服務(wù)器和客戶(hù)端性能不能太差. 測(cè)試 2.5/5/10 千兆可能力不從心.

          主站蜘蛛池模板: 一区二区三区四区无限乱码 | 亚洲人成网站18禁止一区| 亚洲av无一区二区三区| 在线精品亚洲一区二区三区| 春暖花开亚洲性无区一区二区| 麻豆一区二区在我观看| 久久精品动漫一区二区三区| 夜夜添无码试看一区二区三区 | 一区二区三区在线播放| 尤物精品视频一区二区三区| 日韩免费一区二区三区在线播放| 亚洲国产一区二区三区青草影视| 日韩精品无码一区二区视频| 久久99久久无码毛片一区二区| 一级特黄性色生活片一区二区| 国产伦精品一区二区三区四区| 综合一区自拍亚洲综合图区| 欧美激情一区二区三区成人| 无码人妻久久一区二区三区免费丨| 91在线一区二区| 精品人妻系列无码一区二区三区 | 国产一区二区免费在线| 在线播放精品一区二区啪视频| 国产精品夜色一区二区三区| 亚洲国产视频一区| 无码中文人妻在线一区| 国产手机精品一区二区| 天堂一区二区三区在线观看| 理论亚洲区美一区二区三区| 精品一区二区三区四区电影| 丰满岳妇乱一区二区三区| 少妇人妻偷人精品一区二区| 日本免费一区二区久久人人澡| 日韩精品视频一区二区三区 | 97久久精品无码一区二区| 麻豆果冻传媒2021精品传媒一区下载 | 无码国产伦一区二区三区视频 | 日韩欧美一区二区三区免费观看 | 无码AV天堂一区二区三区| 在线中文字幕一区| 成人H动漫精品一区二区 |