NetHandle
这是一个库,方便构建高性能TCP服务端应用程序,站在Go语言的巨人肩膀上
项目地址: https://github.com/gitsrc/NetHandle
一. 特点
- 高性能,低资源消耗
- 非常简单易用的开发接口
- 支持众多协议,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}