Golang實現簡單tcp服務器01 -- 概述

概述

Golang做爲一門近些年來很是風光的開發語言, 其實用範圍很廣, 圖形界面, web框架, 圖像引擎等等.
因爲其語言特性簡化了併發/多核的開發, 受到了很大的關注. 而使用它進行服務器開發, 也是很是高校而簡潔的.
廢話很少說, 本項目實踐的目的是使用golang開發一個簡單的基於tcp協議的服務器/客戶端.git

預備知識

首先, 咱們須要瞭解一下golang下的以下包與特性:golang

goroutine

goroutine是一種輕量型的線程, 做爲golang語言的語言特性, 能夠很簡單的在golang中進行多線程的開發. 利用go關鍵字, 咱們能把任何一個方法/函數, 放在一個新的goroutine裏執行.
實驗01:web

實驗環境主文件夾裏, 創建一個名爲test.go的文本文檔, 並開始編寫如下代碼api

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一下~

相關源碼: https://git.oschina.net/victoriest/go-simple-tcp-server.git

相關文章
相關標籤/搜索