https://github.com/lim-yoona/tcpack
tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program.
https://github.com/lim-yoona/tcpack
go golang golang-examples golang-library golang-package tcp
Last synced: 7 months ago
JSON representation
tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program.
- Host: GitHub
- URL: https://github.com/lim-yoona/tcpack
- Owner: lim-yoona
- License: apache-2.0
- Created: 2023-10-05T09:11:38.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-10-16T02:32:22.000Z (over 2 years ago)
- Last Synced: 2025-08-09T21:41:07.418Z (7 months ago)
- Topics: go, golang, golang-examples, golang-library, golang-package, tcp
- Language: Go
- Homepage: https://pkg.go.dev/github.com/lim-yoona/tcpack
- Size: 41 KB
- Stars: 171
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README-CN.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go-plus - tcpack - tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program.  (Networking / Transliteration)
- awesome-go - tcpack - tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program. (Networking / Transliteration)
- awesome-go - lim-yoona/tcpack
- awesome-go-with-stars - tcpack - 10-16 | (Networking / Transliteration)
- awesome-go-cn - tcpack - yoona/tcpack) [![包含中文文档][CN]](https://github.com/lim-yoona/tcpack) (网络 / 音译)
- awesome-go - tcpack - tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program. (Networking / Transliteration)
- fucking-awesome-go - tcpack - tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program. (Networking / Transliteration)
- awesome-go - tcpack - tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program. (Networking / Transliteration)
- awesome-go-cn - tcpack - yoona/tcpack) [![包含中文文档][CN]](https://github.com/lim-yoona/tcpack) (网络 / 音译)
- awesome-go - tcpack - tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program. (Networking / Transliteration)
README
# tcpack
[](https://pkg.go.dev/github.com/lim-yoona/tcpack)

[](https://goreportcard.com/report/github.com/lim-yoona/tcpack)

[](https://github.com/avelino/awesome-go)
[English](README.md) | 简体中文
[tcpack](https://pkg.go.dev/github.com/lim-yoona/tcpack) 是一个基于 TCP 的应用层协议,用于在 [go](https://go.dev/) 程序中打包和解包字节流。
## tcpack做了什么?
众所周知,TCP 是面向字节流的传输层协议,其数据传输没有明确的边界,因此应用层读取的数据可能包含多个请求而导致无法处理业务。
[tcpack](https://pkg.go.dev/github.com/lim-yoona/tcpack) 就是为了解决这个问题,将请求数据封装成消息,发送时打包,接收时解包。
*注意: 在同一个连接上使用打包器并发读写消息是不安全的,不要去这样做,会带来不可预知的后果!*
如果你想要使用在同一个TCP连接上的多个打包器并发地收发消息,请使用 [safetcpack](https://github.com/lim-yoona/tcpack/tree/main/safe/README-CN.md)。
## tcpack中有什么?
`tcpack` 提供了一个支持 Pack 和 Unpack 的打包器。
## 安装指南
1. 为安装 tcpack 包, 首先你需要安装 [Go](https://go.dev/doc/install) , 然后你可以使用下面的命令将 `tcpack` 作为你Go程序的依赖。
```sh
go get -u github.com/lim-yoona/tcpack
```
2. 将 tcpack 导入到代码中:
```go
import "github.com/lim-yoona/tcpack"
```
## 使用
```go
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
```go
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)
```
## 示例
这有一些 [示例](https://github.com/lim-yoona/tcpack/tree/main/example)。