這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
stpro 一個基於tcp協議實現的簡潔通訊架構
a skeleton for communication based on TCP
github:https://github.com/by-zhang/s... 厚臉皮求star
特性
- 引入go包即可使用
- 實現了crc校正,保證資料轉送的完整性與正確性
- 調用方式簡單明了
快速開始
1. 引入
import "stpro"
2. server 端
/** 三步搭建服務端 1 定義任意名稱struct的資料結構,必須包含Pmap、Phost兩個 欄位,其中Phost為服務端ip+port拼接的字串,Pmap為自定 義資料包類型與資料包名稱的映射。 2 執行個體化對象為欄位賦值,實現對應已定義`包名稱`的資料包處 理方法,方法名必為"P[包名稱]",如type包的處理方法為Ptype 。方法中請定義資料處理邏輯,輸入輸入皆為[]byte類型。 3 stpro.New()傳入執行個體化的對象,如無報錯則服務端開始監聽, 並按照你所定義的邏輯處理資料包,返迴響應資料。 **/ package main import ( "fmt" "stpro" ) type Server struct { Phost string Pmap map[uint8]string } func (m Server) Ptype(in []byte) (out []byte) { fmt.Printf("用戶端發來type包:%s\n", in) /** process... **/ bytes := []byte("hello1") return bytes } func (m Server) Pname(in []byte) (out []byte) { fmt.Printf("用戶端發來name包:%s\n", in) /** process... **/ bytes := []byte("hello2") return bytes } func main() { m := Model{ Phost: ":9091", Pmap: make(map[uint8]string), } m.Pmap[0x01] = "type" m.Pmap[0x02] = "name" err := stpro.New(m) if err != nil { fmt.Println(err) } }
3.client端
/** 三部搭建用戶端 1 資料結構同服務端。 2 P[type]方法是發送對應包後接收到響應資料的處理方法。 3 執行個體化對象,並調用Send(type byte, content []byte)方 法發送資料到用戶端,接收到的資料後會自定按照上述定 義方法處理。 **/ package main import ( "fmt" "stpro" ) type Client struct { Phost string Pmap map[byte]string } func (c Client) Ptype(in []byte) { fmt.Printf("收到了type包的回複:%s\n", in) } func (c Client) Pname(in []byte) { fmt.Printf("收到了name包的回複:%s\n", in) } func main() { client, err := stpro.NewClient(Client{ Phost: "192.168.1.106:9091", Pmap: map[byte]string{ 0x01: "type", 0x02: "name", }, }) if err != nil { fmt.Println(err) return } err = client.Send(0x02, []byte("jintianzhenhao")) if err != nil { fmt.Println(err) return } err = client.Send(0x01, []byte("jintianzhenhao3333")) if err != nil { fmt.Println(err) return } }