Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: about 1 month 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 (8 months ago)
- Default Branch: main
- Last Pushed: 2023-10-16T02:32:22.000Z (8 months ago)
- Last Synced: 2024-01-31T05:16:26.403Z (4 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: 175
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README-CN.md
- License: LICENSE
Lists
- 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-cn - tcpack - yoona/tcpack) [![godoc][D]](https://godoc.org/github.com/lim-yoona/tcpack) [![包含中文文档][CN]](https://github.com/lim-yoona/tcpack) (网络 / 音译)
- awesome-go-stars - 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-with-stars - 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 - tcpack - tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program. (Networking / Transliteration)
README
# tcpack
[![Go Reference](https://pkg.go.dev/badge/github.com/lim-yoona/tcpack.svg)](https://pkg.go.dev/github.com/lim-yoona/tcpack)
![GitHub](https://img.shields.io/github/license/lim-yoona/tcpack)
[![Go Report](https://img.shields.io/badge/go%20report-A+-brightgreen.svg?style=flat)](https://goreportcard.com/report/github.com/lim-yoona/tcpack)
![GitHub release (with filter)](https://img.shields.io/github/v/release/lim-yoona/tcpack)
[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge-flat.svg)](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 mainimport "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)。