Skip to content

Latest commit

 

History

History
94 lines (63 loc) · 2.79 KB

README-CN.md

File metadata and controls

94 lines (63 loc) · 2.79 KB

tcpack

Go Reference GitHub Go Report GitHub release (with filter) Mentioned in Awesome Go

English | 简体中文

tcpack 是一个基于 TCP 的应用层协议,用于在 go 程序中打包和解包字节流。

tcpack做了什么?

众所周知,TCP 是面向字节流的传输层协议,其数据传输没有明确的边界,因此应用层读取的数据可能包含多个请求而导致无法处理业务。

tcpack 就是为了解决这个问题,将请求数据封装成消息,发送时打包,接收时解包。

注意: 在同一个连接上使用打包器并发读写消息是不安全的,不要去这样做,会带来不可预知的后果!

如果你想要使用在同一个TCP连接上的多个打包器并发地收发消息,请使用 safetcpack

tcpack中有什么?

tcpack 提供了一个支持 Pack 和 Unpack 的打包器。

安装指南

  1. 为安装 tcpack 包, 首先你需要安装 Go , 然后你可以使用下面的命令将 tcpack 作为你Go程序的依赖。
go get -u github.com/lim-yoona/tcpack
  1. 将 tcpack 导入到代码中:
import "github.com/lim-yoona/tcpack"

使用

package main

import "github.com/lim-yoona/tcpack"

func main() {
    // 创建一个打包器
    mp := tcpack.NewMsgPack(8, tcpConn)

    // 打包一个消息并发送
    msg := tcpack.NewMessage(0, uint32(len([]byte(data))), []byte(data))
    num, err := mp.Pack(msg)

    // 解包一个消息并接收
    msg, err := mp.Unpack()
}

支持JSON

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

// 创建一个打包器
mp := tcpack.NewMsgPack(8, tcpConn)

// data JSON Marshal
data := &Person{
	Name: "jack",
	Age:  20,
}
dataJSON, _ := json.Marshal(data)

// 打包一个消息并发送
msgSend := tcpack.NewMessage(0, uint32(len(dataJSON)), dataJSON)
num, err := mp.Pack(msgSend)

// 解包一个消息并接收
msgRsv, err := mp.Unpack()

// JSON UnMarshal
var dataRsv Person
json.Unmarshal(msgRsv.GetMsgData(), &dataRsv)

示例

这有一些 示例