NetHandle

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

项目地址: uriModule/NetHandle

一. 特点

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

二. 安装

go get -u moduleUri/NetHandle

三. 性能测试:

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

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

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

四. 样例代码:

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

package main

import (
    "fmt"
    "moduleUri/NetHandle"
    "log"
    "sync"
)

var addrTcp = "127.0.0.1:10000"

func main() {
    log.SetFlags(log.Lshortfile | log.LstdFlags)

    var mu sync.RWMutex
    count := 0
    go log.Printf("started server at %s", addrTcp)

    err := NetHandle.ListenAndServe("tcp", addrTcp,
        func(conn NetHandle.Conn) {

            requestData := make([]byte, 512)

            _, err := conn.NetConn().Read(requestData)

            if err != nil {
                conn.Close()
                return
            }

            mu.Lock()
            count++
            mu.Unlock()

            countCurrent := 0

            mu.RLock()
            countCurrent = count
            mu.RUnlock()

            replyData := fmt.Sprintf("%d\r\n", countCurrent)
            conn.NetConn().Write(append([]byte(replyData)))

        },
        func(conn NetHandle.Conn) bool {
            // use this function to accept or deny the connection.
            log.Printf("accept: %s", conn.RemoteAddr())
            return true
        },
        func(conn NetHandle.Conn, err error) {
            // this is called when the connection has been closed
            log.Printf("closed: %s, err: %v", conn.RemoteAddr(), err)
        },
    )
    if err != nil {
        log.Fatal(err)
    }
}
文档更新时间: 2019-01-04 17:27   作者:李彪