Skip to content

⚡ Evnet is event-driven net framework with high performance deriving from gnet and evio.

License

Notifications You must be signed in to change notification settings

bruce2233/evnet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

edf375d · Feb 16, 2023

History

97 Commits
Feb 14, 2023
Jan 29, 2023
Aug 9, 2022
Feb 16, 2023
Aug 10, 2022
Feb 16, 2023
Feb 16, 2023
Feb 13, 2023
Feb 16, 2023
Feb 16, 2023
Feb 14, 2023
Feb 14, 2023
Feb 14, 2023
Feb 16, 2023
Aug 10, 2022
Feb 14, 2023
Feb 16, 2023
Feb 16, 2023

Repository files navigation

⚡ Introduction

Evnet is event-driven net framework with high performance deriving from gnet and evio. It supports epoll syscall in Linux. If it's useful to you, Please STAR it!

✨ Features

  • Supporting an event-driven mechanism: epoll on Linux.
  • Supporting multiple protocols/IPC mechanism: TCP, UDP and Unix Domain Socket.
  • Efficient memory buffer and zero copy.
  • Supporting multiple load-balancing algorithms: Round-Robin, Source-Addr-Hash and Least-Connections
  • Implementation of gnet Client

🎬 Getting started

go get github.com/bruce2233/evnet
import "github.com/bruce2233/evnet"

type MyHandler struct {
	BuiltinEventHandler
}

func (mh MyHandler) OnTraffic(c Conn) error{
	p, err := c.Next(-1)
    if err!=nil{
        return evnet.ErrClose
    }
    c.AsyncWrite(p, func(c Conn){
        c.Close()
    })
}

//main.go
func main() {
	readHandler := MyHandler{BuiltinEventHandler{}}
	Run(readHandler, "tcp://127.0.0.1:9000")
}

BenchTest

# Machine information
        OS : Ubuntu 20.04/x86_64
       CPU : 8 CPU cores, Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz
    Memory : 4.0 GiB
  Platform : VMware Workstation 16.2.3

# Go version and settings
Go Version : go1.18.3 linux/amd64
GOMAXPROCS : 8
The average performance of evnet in the condition of 12 threads and 1000 connections is 103% more than standard net/http package.

| Thread Stats | Avg    | Stdev  | Max     | +/- Stdev |
| ------------ | ------ | ------ | ------- | --------- |
| Latency      | 7.94ms | 8.90ms | 84.67ms | 85.92%    |
| Req/Sec      | 13.60k | 4.41k  | 32.25k  | 68.19%    |
1622016 requests in 10.09s, 199.55MB read

Requests/sec: 160690.88
Transfer/sec:     19.77MB

pprof analysis

go tool pprof -http=:9999 cpu.pprof

About

⚡ Evnet is event-driven net framework with high performance deriving from gnet and evio.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages