Node.js與Golang使用感覺與小結【一】

Node.js與Golang使用感覺與小結 javascript

目錄 php

1、互聯網的基石TCP/IP協議 html

2、HTTP服務器編寫與編程語言無關 前端

3、構建HTTP服務器須要掌握的知識點 java

4、HTTP協議基礎 node

5、Node.js簡介 python

6、是前端選擇,仍是後端的福音? web

7、Node.js與傳統php-fpm模式之間的對比 算法

8、安裝Node.js 數據庫

9、讓瀏覽器讀懂你的心--Content-Type

10、向瀏覽器發送文件

11、Node.js異步流程控制(序列模式、併發模式、有限併發模式)

12、靜態資源文件的簡單優化

十3、如今還需少些什麼?

十4、Golang 簡介

十5、爲何要用Golang

十6、安裝Golang開發環境

十7、如何使用Golang 編寫一個HTTP服務器?

十8、Golang http包與Node.jshttp模塊對比

 

前言

   這篇文章是對於近段時間以來我對於這兩個平臺的一些初步的瞭解,或許文中某些觀點與您有所不一樣,但這倒是此時我對這兩個平臺的一些認識,以及使用這兩個平臺給我帶來的真實感覺。

1、互聯網的基石TCP/IP協議

    能夠絕不誇張的說,若是沒有TCP/IP 協議,那麼也就沒有此時的互聯網。TCP/IP協議的架構層,常常被人們與OSI網絡分層相對比。從概念上來講OSI或許更加完善先進,可是歷史卻選擇了TCP/IP協議。由於早期的unix系統實現了TCP/IP協議,而且運行的很好。因而OSI模式便不多有人願意去實現它,也許正是由於這樣。TCP/IP協議才成就了今天的地位,行業的標準。

 

       

 

2、HTTP服務器編寫與編程語言無關

    2009年以前,大部份web方面的從業者都習慣於使用服務器+語言的運行模式,好比用

Apache+php 或Nginx+php的模式。但隨後出現的一些語言平臺以及基於某些語言的框架打破了這種模式。好比Node.js,又好比Ruby社區的Rails。因而可知編寫一個HTTP服務器,與您所使用的語言沒太多關係。無論你用javascript、或phppython,只要能把內容經過HTTP協議推送到前端瀏覽器就好。


3、構建HTTP服務器須要掌握的知識點

  一、HTTP協議基礎(知道HTTP通訊的基本模式,包括經常使用報文)

     這篇文章沒有打算對於某門語言進行入門級別的指導,所以您可能須要本身去網絡上搜集這方面的資源。關於HTTP協議基礎能夠參考《HTTP權威指南》,您能夠花一兩週的時間把這本書看完。相信您看完以後,多少都會對您的知識體系有所幫助。

  二、熟悉一門語言python,ruby,php,javascript 等,甚至Lisp也行。

   熟悉一門語言是必須的,建議您選擇一門喜歡的語言去學習,不管是Golang或是javascript,都是不錯的開始。編程語言很大程度上只是你去實現某些事情的一個工具,沒必要執着於哪門語言好或壞,每一門語言能存在五年以上而且還有不少人用的語言,必然有着它吸引人的地方。

  三、可以用你熟悉的語言進行基於TCP/IP協議上的通訊。

    不管你選擇什麼樣的語言,若是進行網絡編程的話都須要想辦法讓它能支持TCP/IP協議。據目前的狀況來看,不少現代語言或多或少的都有方法去支持TCP/IP通訊。甚至php這門語言,也能夠經過libevent 的擴展實現一個簡單的http服務器。

4、HTTP協議基礎

   HTTP是以TCP/IP爲基礎的網絡協議,目前該協議最爲經常使用的版本是1.1版本。瞭解HTTP協議的一些簡單知識,能夠在您編寫服務器時更快的發現和解決問題。固然HTTP頭中的不少信息對於網站的優化都會有影響,好比頭部中的緩存控制可讓您減小服務器的I/O消耗,現代服務器的主要瓶頸仍是在於I/O消耗。

    HTTP協議主要由兩個過程組成------請求報文與返回報文。

    關於請求報文

     請求報文主要由兩部份組成,第一部份則是起始行,起始行規定了請求時使用的HTTP方法、請求資源路徑以及當前客戶端使用的HTTP協議版本(雖然如今大部份瀏覽器都默認使用1.1版本,可是仍是有部份用戶使用更爲古老的版本)。下圖是一個請求報文的抓包截圖,咱們將會對其進行簡單的說明。

 第一行 GET  http://nodejs.org/   HTTP/1.1  這一行的意思是瀏覽器告訴服務器端,當前正在使用HTTP 1.1協議中的GET方法獲取http://nodejs.org/ 這個路徑的資源。第一行之下的部份,能夠單獨當作一個部份。以鍵值對(K-V)的形式存在,能夠想像成關係數據庫中的字段與字段值。

字段

字段名

解釋

擴展

Host

nodejs.org

告訴服務器當前訪問的主機名爲nodejs.org

若是你正在實現一個相似於Apache中的vhost功能,那麼這個字段可能對你有用

User-Agent

:Mozilla/5.0 (windows NT 6.1; wow64;rv:18.0)  Gecko/20100101 Firefox/18.0

告訴服務器,當前訪問您的設備的工做環境

若是你正在作一個瀏覽器信息統計的功能,那麼這段報文可能對你有用,固然這段報文也能夠被用戶僞造

Accept

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

 

 

告訴服務器,當前訪問您的瀏覽器支持些什麼文檔類型

 

Accept-Language

 

en-US,en;q=0.5

 

告訴服務器,當前訪問您的設備支持些什麼語言

若是您正在製做一個國際化的站點,那麼這一部份信息可能對您有用。

Accept-Encoding

 

gzip, deflate

 

告訴服務器,當前訪問您的設備支持哪些壓縮算法

若是您想減小網絡傳輸量,特別是靜態資源的傳輸量。可能這一部份信息對您有用,在實際工做中有些靜態資源經過Gzip壓縮後,體積只有原來的30%左右。

Pragma

no-cache

告訴服務器,此頁面不緩存

事實上這個字段能夠用Cache-Control控制

Cache-Control

no-cache

告訴服務器,此頁面不緩存

作頁面緩存控制的時候可使用

 

 

  Web開發基本上都是圍繞http協議展開,因此瞭解並熟悉http協議對於長遠發展來講是有好處的。經過合理利用http header字段,還可以幫助咱們減小不少安全方面的問題。但目前注重一塊的web開發人員較少。

將來完,,,待續

==========================================================

關於做者:

網名:念念之間    現居:深圳

Email:jinfei121@qq.com

QQ:490821193

  從03年開始玩論壇,但正式寫代碼是前幾年的事情。剛工做前兩主要寫php程序,目前主要專職寫

Javascript.平時喜歡研究各類新鮮技術~~ 

  Node與Golang的粉絲~~

==========================================================

相關文章
相關標籤/搜索