开源: 高性能网络监听库-NetHandle

Posted by LB on Wed, Jan 2, 2019

NetHandle

这是一个库,方便构建高性能TCP服务端应用程序,站在Go语言的巨人肩膀上

项目地址: https://github.com/gitsrc/NetHandle

一. 特点

  1. 高性能,低资源消耗
  2. 非常简单易用的开发接口
  3. 支持众多协议,TCP,UDP,UNIX

二. 安装

go get -u github.com/gitsrc/NetHandle

三. 性能测试:

3.1 50*10000 (50线程 X 10000请求)

3.2 50*20000 (50线程 X 20000请求)

3.3 100*10000 (100线程 X 10000请求)

四. 样例代码:

使用这个库的时候,只需要自定义简单的回调函数,即可构造出性能强悍的网络监听.

 1package main
 2
 3import (
 4	"fmt"
 5	"github.com/gitsrc/NetHandle"
 6	"log"
 7	"sync"
 8)
 9
10var addrTcp = "127.0.0.1:10000"
11
12func main() {
13	log.SetFlags(log.Lshortfile | log.LstdFlags)
14
15	var mu sync.RWMutex
16	count := 0
17	go log.Printf("started server at %s", addrTcp)
18
19	err := NetHandle.ListenAndServe("tcp", addrTcp,
20		func(conn NetHandle.Conn) {
21
22			requestData := make([]byte, 512)
23
24			_, err := conn.NetConn().Read(requestData)
25
26			if err != nil {
27				conn.Close()
28				return
29			}
30
31			mu.Lock()
32			count++
33			mu.Unlock()
34
35			countCurrent := 0
36
37			mu.RLock()
38			countCurrent = count
39			mu.RUnlock()
40
41			replyData := fmt.Sprintf("%d\r\n", countCurrent)
42			conn.NetConn().Write(append([]byte(replyData)))
43
44		},
45		func(conn NetHandle.Conn) bool {
46			// use this function to accept or deny the connection.
47			log.Printf("accept: %s", conn.RemoteAddr())
48			return true
49		},
50		func(conn NetHandle.Conn, err error) {
51			// this is called when the connection has been closed
52			log.Printf("closed: %s, err: %v", conn.RemoteAddr(), err)
53		},
54	)
55	if err != nil {
56		log.Fatal(err)
57	}
58}