這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
概述
Golang作為一門近些年來非常風光的開發語言, 其實用範圍很廣, 圖形介面, web架構, 映像引擎等等.
由於其語言特性簡化了並發/多核的開發, 受到了很大的關注. 而使用它進行伺服器開發, 也是非常高校而簡潔的.
廢話不多說, 本項目實踐的目的是使用golang開發一個簡單的基於tcp協議的伺服器/用戶端.
預備知識
首先, 我們需要瞭解一下golang下的如下包與特性:
goroutine
goroutine是一種輕量型的線程, 作為golang語言的語言特性, 可以很簡單的在golang中進行多線程的開發. 利用go關鍵字, 我們能把任何一個方法/函數, 放在一個新的goroutine裡執行.
實驗01:
在**實驗環境**的**主資料夾**裡, 建立一個名為test.go的文字文件, 並開始編寫以下代碼
package main import ( "fmt" ) var quit chan bool = make(chan bool) func main() { go testGorountine() <-quit } func testGorountine() { for i := 0; i < 10; i++ { fmt.Println("Hello world!") } quit <- true }
然後, 開啟xFce終端, 鍵入命令
go run test.go
我們就會看到終端的輸出, 可以看到10行“hello world”. 這裡, 我們的hello world程式就是利用了gorountine建立了一個多線程/協程程式, 然後利用channel等待開啟的協程處理完畢, 才結束主線程.
net包
在net包中, 提供了常用網路I/O操作的api, 包括我們的實驗中需要用到的, Listen, Accept, Write, Read等方法. 具體參考連結:http://godoc.golangtc.com/pkg/net/
bufio包
bufio包則提供了一套有緩衝的I/O讀寫操作的方法, 在我們的伺服器與用戶端進行資料通訊時, 會用到. 參考連結:http://godoc.golangtc.com/pkg/bufio/
然後, 還需要對**長串連的TCP伺服器**與用戶端通訊有個基本的認識:
client向server發起串連,server接受client串連,雙方建立串連。Client與server完成一次讀寫之後,它們之間的串連並不會主動關閉,後續的讀寫操作會繼續使用這個串連。 關於這個概念, 網上有很多參考資料, 如果還不清楚, 隨便google一下~