go 語言連線池

bean發表於2022-08-11

因為專案需求,需要用到連線池,在看了很多程式碼之後發現不能滿足需求,所以自己擼一個,現在開源出來,看能否幫到跟我有同意需求的同學

倉庫地址: github.com/bean-du/pool

歡迎大家 Star 和 Issuse

支援:

  1. DialerFunc 透過此func 定義需要管理的連線型別
  2. ReadFunc 根據連線型別自定義資料讀取函式
  3. WriteFunc 根據連線型別自定義資料寫入函式
  4. KeepaliveFunc 根據連線型別自定義心跳

使用示例:

package main

import (
    "context"
    "github.com/bean-du/pool"
    "log"
    "os"
    "os/signal"
    "time"
)

func main() {

    sig := make(chan os.Signal, 1)
    signal.Notify(sig, os.Interrupt, os.Kill)

    // init a pool with options
    client := pool.NewClient(
        pool.WebsocketDialer("ws://127.0.0.1:8081/ws"),
        // set pool size
        pool.WithPoolSize(50),
        // set write func default is tcp writer
        pool.WithWriteFunc(pool.WsWriter),
        // set read func, must be set
        pool.WithReadFunc(pool.WebsocketReadFunc(dataHandleFunc)),
        // set min idle connections
        pool.WithMinIdleConns(10),
        // set idle check duration
        pool.WithIdleCheckFrequency(time.Second*10),
    )

    for i := 0; i < 10; i++ {
        go func() {
            if err := client.Send(context.Background(), []byte("hello")); err != nil {
                log.Println(err)
            }
        }()
    }

    select {
    case <-sig:
        client.Close()
    }
}

func dataHandleFunc(p []byte) {
    go func() {
        log.Println(string(p))
    }()
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章