一個TCP服務端能夠同時鏈接不少個客戶端,例如世界各地的用戶使用本身電腦上的瀏覽器訪問淘寶網。由於Go語言中建立多個goroutine實現併發很是方便和高效,因此咱們能夠每創建一次連接就建立一個goroutine去處理。瀏覽器
TCP服務端程序的處理流程:併發
package main import ( "fmt" "net" "os" ) func errFunc(err error,info string){ if err !=nil{ fmt.Println(info,err) os.Exit(1) //將當前進程結束 } } func main(){ listen,err :=net.Listen("tcp","127.0.0.1:8000") errFunc(err,"connet net failed") defer listen.Close() conn,err :=listen.Accept() errFunc(err,"Accept err") defer conn.Close() buf :=make([]byte,4096) n,err :=conn.Read(buf) if n ==0{ return } errFunc(err,"conn Read") fmt.Println(string(buf[:n])) conn.Write([]byte(string(buf[:n]))) // 發送數據 }
http請求包:tcp
請求行:請求方法(空格)請求文件URL(空格)協議版本
請求頭:語法格式:key:value
空行:\r\n ---請求
請求包體blog