一個go語言實現的簡潔TCP通訊架構

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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        }    }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.