因為專案需求,需要用到連線池,在看了很多程式碼之後發現不能滿足需求,所以自己擼一個,現在開源出來,看能否幫到跟我有同意需求的同學
倉庫地址: github.com/bean-du/pool
歡迎大家 Star 和 Issuse
支援:
- DialerFunc 透過此func 定義需要管理的連線型別
- ReadFunc 根據連線型別自定義資料讀取函式
- WriteFunc 根據連線型別自定義資料寫入函式
- 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 協議》,轉載必須註明作者和本文連結