golang powerful network framework
- High-performance Event-Loop under multi-threads model
- Supporting multiple protocols: TCP,Websocket
- Supporting reactor event-notification mechanisms: epoll in Linux/Windows and kqueue in FreeBSD
- Supporting safe goroutines worker pool
- Supporting two contentType: JSON/Protobuf
- Supporting router service for different operate and handle functions
- install
go get -u github.com/ebar-go/znet
- go run server.go
// server.go package main import ( "github.com/ebar-go/ego/utils/runtime/signal" "github.com/ebar-go/znet" ) const( ActionFoo = 1 // define a foo operate ) func main() { // new instance instance := znet.New() // listen tcp and websocket instance.ListenTCP(":8081") instance.ListenWebsocket(":8082") // register a router for some operate instance.Router().Route(ActionFoo, func(ctx *znet.Context) (any, error) { // return response to the client return map[string]any{"foo": "bar"}, nil }) // run the instance, graceful stop by ctrl-c. instance.Run(signal.SetupSignalHandler()) }
- Framework Framework
- Engine Start Sequence Diagram
Sequence Diagram
- TCP : We design the protocol for sticky packet problem
|-------------- header --------------|-------- body --------|
|packetLength| action | seq |-------- body --------|
| 4 | 2 | 2 | n |
- WebSocket : don't need the packet length
|-------------- header --------------|-------- body --------|
| action | seq |-------- body --------|
| 2 | 2 | n |
goos: linux
goarch: amd64
pkg: github.com/ebar-go/znet
cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
|-----------------------------------|
| connections | memory | cpu |
|-----------------------------------|
| 10000 | 50MB | |
|-----------------------------------|