Skip to content

Repository files navigation

node

介绍

node是一个Go(Golang)编写的轻量级TCP框架,node帮助您轻松、快速构建TCP服务器。

特征:

  • 支持请求响应模型
  • 支持多服务端节点桥接组网内部实现动态路由协议
  • 并发100w/s 请求响应

传输协议

typeMessagestruct {
Typeuint8//消息类型,不同的协议该值不同Hopuint8//消息的跳数Iduint32//消息唯一标识SrcIduint32//源节点DestIduint32//目的节点Data []byte//消息内容
}
Header 20ByteType 1ByteHop 1ByteId 4ByteSrcId 4ByteDestId 4ByteDataLength 4Byte
CheckSum 2Byte
Data

安装

go get -u github.com/Li-giegie/node@latest

快速开始

Server

Server 完整的示例

package main
import (
"github.com/Li-giegie/node""github.com/Li-giegie/node/pkg/conn""github.com/Li-giegie/node/pkg/message""github.com/Li-giegie/node/pkg/reply""github.com/Li-giegie/node/pkg/server""log""net"
)
funcmain() {
srv:=node.NewServerOption(1)
server.OnAccept(func(conn net.Conn) (nextbool) {
log.Println("OnAccept", conn.RemoteAddr())
returntrue
})
server.OnConnect(func(conn*conn.Conn) (nextbool) {
log.Println("OnConnect", conn.RemoteAddr())
returntrue
})
server.OnMessage(func(r*reply.Reply, m*message.Message) (nextbool) {
log.Println("OnMessage", m.String())
r.String(message.StateCode_Success, "pong")
returntrue
})
server.OnClose(func(conn*conn.Conn, errerror) (nextbool) {
log.Println("OnClose", conn.RemoteAddr())
returntrue
})
log.Println("listen: 7890")
err:=srv.ListenAndServe(":7890", nil)
iferr!=nil {
log.Fatal(err)
}
}

Client

Client 完整的示例

package main
import (
"context""github.com/Li-giegie/node""github.com/Li-giegie/node/pkg/client""github.com/Li-giegie/node/pkg/conn""github.com/Li-giegie/node/pkg/message""github.com/Li-giegie/node/pkg/reply""log"
)
funcmain() {
c:=node.NewClientOption(2, 1)
client.OnMessage(func(r*reply.Reply, m*message.Message) (nextbool) {
log.Println(m.String())
r.Write(message.StateCode_Success, m.Data)
returntrue
})
client.OnClose(func(conn*conn.Conn, errerror) (nextbool) {
log.Println("OnClose", err)
returntrue
})
err:=c.Connect("tcp://127.0.0.1:7890", nil)
iferr!=nil {
log.Fatal("connect err:", err)
return
}
log.Println("connect: 7890")
deferc.Close()
iferr=c.Send([]byte("hello")); err!=nil {
log.Println("send err:", err)
return
}
code, data, err:=c.Request(context.TODO(), []byte("world"))
iferr!=nil {
log.Println("request err:", err)
return
}
log.Println("code:", code, "data:", string(data))
}

基准

测试环境:联想小新 Pro16 锐龙版

测试包:github.com/Li-giegie/node/test

文件:

  • bench_echo_server_test.go
  • bench_echo_client_test.go

测试函数:

  • TestServer
  • BenchmarkEchoRequest 同步请求
  • BenchmarkEchoRequestGo 并发请求
gotest-runnone-benchBenchmarkEchoRequest-benchmem
goos: windows
goarch: amd64
pkg: github.com/Li-giegie/node/test
cpu: AMDRyzen55600HwithRadeonGraphicsBenchmarkEchoRequest-121854965039ns/op186B/op6allocs/opBenchmarkEchoRequestGo-1210000001619ns/op393B/op7allocs/op

功能

单服务端节点
+---------------------------+
| Server node |
| / \ |
| / \ | | Client Client |
+---------------------------+
多服务端节点互联
+---------------------------+
| ServerNode |
| / \ |
| / \ | | Node Node |
+---------------------------+
/ \
/ \
+-------------/-------------+ +-----------\---------------+
| ServerNode | | ServerNode |
| / \ | | / \ |
| / \ | | / \ | | Node Node | | Node Node |
+---------------------------+ +---------------------------+

协议

关于协议的进一步使用 README

作者邮箱

859768560@qq.com

About

一个Go(Golang)编写的轻量级TCP框架,node帮助您轻松、快速构建TCP服务器。

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages