【鏈塊技術50期】區塊鏈技術基礎語言(三十二):Go語言網絡編程(下)

原文鏈接:區塊鏈技術基礎語言(三十二):Go語言網絡編程(下)

 

本文緊接上文所述,講解socket編程和HTTP編程。

一、socket編程

在上一節我們介紹了網絡體系的五層模型,介紹了每層模型所遵守的協議。TCP/IP是一個協議族,它由網絡層的IP協議和傳輸層的TCP協議組成,其中網絡層建立了主機到主機的通信,傳輸層建立了端口到端口的通信。只要確定主機和端口,就能實現程序之間的交流。因此,Unix系統把主機+端口,叫作“套接字(socket)”,而socket本質上是編程接口(API),它是對TCP/IP的封裝。有了它,就可以進行網絡應用程序的開發。

 

1.1 網絡中進程之間的通信

網絡中的每個進程都運行在獨立的地址空間,爲了保證兩個相互通信的進程在互不干擾的前提下協調一致地工作,操作系統需要解決網間進程的標識問題。在網絡概述中已經介紹過,ip地址可以唯一標識網絡中的主機,而傳輸層的“協議+端口”可以唯一標識主機中的應用程序,也就是進程。因此網絡中的進程通信可以通過“ip地址+協議+端口”與其它進程進行交互。而TCP/IP協議的應用程序通常採用應用編程接口:UNIX BSD的套接字(socket)。

 

1.2 socket套接字

Socket本質上是編程接口(API),它是對TCP/IP的封裝,是應用層和其他層(傳輸層、網絡層、數據鏈路層)之間的軟件抽象層,它將傳輸層、網絡層、數據鏈路層隱藏在socket接口後面。對用戶來說,一組簡單的接口就是全部,讓socket去組織數據,以符合指定的協議,讓編程變得更簡單。

區塊鏈技術教程 Go語言網絡編程 socket 套接宇1.2_副本.png

 

1.3 TCP的C/S架構

TCP的C/S架構主要分爲客戶端和服務器端。

服務器端先初始化socket,接着將socket與端口進行綁定(bind),然後對端口進行監聽(listen),然後調用accept函數,等待客戶端地請求連接。在這時如果有一個客戶端初始化一個socket,然後連接服務器(connect),如果連接成功,這時客戶端與服務器端的連接就建立了。客戶端發送數據請求,服務器端接收請求並處理請求,然後把迴應數據發送給客戶端,客戶端讀取數據,最後關閉連接(close),一次交互結束。

區塊鏈技術教程 Go語言網絡編程 TCP的CS架構1.3_副本.png

 

1.4 示例程序

1.4.1 簡單服務器

設計一個服務器程序和客戶端程序。啓動服務器程序後,再啓動客戶端程序,客戶端的程序連接到服務器程序後,客戶端的信息內容會顯示在服務器程序。

區塊鏈技術教程 Go語言網絡編程 簡單 服務器1.4.1_副本.png

1.4.2 簡單併發服務器

在1.4.1中啓動服務器程序,再運行客戶端程序,整個程序就會結束。現在服務器程序設計一個能同時處理多個客戶端程序發送的內容。

區塊鏈技術教程 Go語言網絡編程 併發 服務器1.4.2_副本.jpg

 

二、HTTP編程

2.1 概述

2.1.1 Web工作方式

平時瀏覽某一網頁,我們一般會打開瀏覽器,輸入網址,回車後就可以瀏覽網址內容。這一簡單的操作行爲,系統是通過以下步驟實現的:

a. 瀏覽器是一個客戶端,輸入URL(統一資源定位符,即網址),瀏覽器通過請求DNS服務器獲取相應的域名所對應的IP;

b. 通過IP地址找到IP對應的服務器,建立TCP連接;

c. 瀏覽器向服務器發送HTTP Request包,等服務器全部接收到請求包服務器纔開始處理請求包,然後服務器向瀏覽器(客戶端)返回HTTP Response(響應)包;

d. 客戶端收到來自服務器的響應後開始渲染這個Response包裏的主體(body),等收到全部的內容之後,就斷開與該服務器之間的TCP連接。

區塊鏈技術教程 Go語言網絡編程 服務器 請求包 2.2.1_副本.png

 

2.1.2 HTTP服務器工作原理

Web服務器也被稱爲HTTP服務器,它通過HTTP協議與客戶端通信。其工作原理即:

a. 客戶機通過TCP/IP協議與服務器建立TCP連接;

b. 客戶端向服務器發送HTTP協議請求包,請求服務器裏的資源文檔;

c. 服務器向客戶機發送HTTP協議應答包,如果請求的資源包含有動態語言的內容,那麼服務器會調用動態語言的解釋引擎負責處理“動態內容”,並將處理得到的數據返回給客戶端;

d. 客戶機與服務器斷開。由客戶端解釋HTML文檔,在客戶端屏幕上渲染圖形結果。

2.1.3 HTTP協議

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議),是應用層的協議,如表1所示。它是互聯網應用中最爲廣泛的一種網絡協議,詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。

區塊鏈技術教程 Go語言網絡編程 HTTP協議 2.1.3_副本.png

 

 2.2 HTTP 請求和應答

2.2.1 客戶端向服務器請求包

建立一個HTTP服務器,在客戶端(瀏覽器)輸入URL,向HTTP服務器發送請求包。

區塊鏈技術教程 Go語言網絡編程 服務器 請求包 2.2.1_副本.png

2.2.2 服務器向客戶端發出的應答包

建立一個HTTP服務器和客戶端,客戶端連接HTTP服務器,服務器向客戶端發送應答包。

區塊鏈技術教程 Go語言網絡編程 服務器 發出的應答包 2.2.2_副本.jpg

參考資料

[1] https://studygolang.com/pkgdoc

[2] https://blog.csdn.net/qq_33530388/article/details/65935217

 

-END-

 

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章