gitee.com/quant1x/gox@v1.21.2/pool/example/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"net"
     6  	"os"
     7  	"os/signal"
     8  	"syscall"
     9  	"time"
    10  
    11  	"gitee.com/quant1x/gox/pool"
    12  )
    13  
    14  const addr string = "127.0.0.1:8080"
    15  
    16  func main() {
    17  	c := make(chan os.Signal)
    18  	signal.Notify(c, os.Interrupt, os.Kill, syscall.SIGUSR1, syscall.SIGUSR2)
    19  	go server()
    20  	//等待tcp server启动
    21  	time.Sleep(2 * time.Second)
    22  	client()
    23  	fmt.Println("使用: ctrl+c 退出服务")
    24  	<-c
    25  	fmt.Println("服务退出")
    26  }
    27  
    28  func client() {
    29  
    30  	//factory 创建连接的方法
    31  	factory := func() (interface{}, error) { return net.Dial("tcp", addr) }
    32  
    33  	//close 关闭连接的方法
    34  	close := func(v interface{}) error { return v.(net.Conn).Close() }
    35  
    36  	//创建一个连接池: 初始化2,最大连接5,空闲连接数是4
    37  	poolConfig := &pool.Config{
    38  		InitialCap: 2,
    39  		MaxIdle:    4,
    40  		MaxCap:     5,
    41  		Factory:    factory,
    42  		Close:      close,
    43  		//连接最大空闲时间,超过该时间的连接 将会关闭,可避免空闲时连接EOF,自动失效的问题
    44  		IdleTimeout: 15 * time.Second,
    45  	}
    46  	p, err := pool.NewChannelPool(poolConfig)
    47  	if err != nil {
    48  		fmt.Println("err=", err)
    49  	}
    50  
    51  	//从连接池中取得一个连接
    52  	v, err := p.Get()
    53  
    54  	//do something
    55  	//conn=v.(net.Conn)
    56  
    57  	//将连接放回连接池中
    58  	p.Put(v)
    59  
    60  	//释放连接池中的所有连接
    61  	//p.Release()
    62  
    63  	//查看当前连接中的数量
    64  	current := p.Len()
    65  	fmt.Println("len=", current)
    66  }
    67  
    68  func server() {
    69  	l, err := net.Listen("tcp", addr)
    70  	if err != nil {
    71  		fmt.Println("Error listening: ", err)
    72  		os.Exit(1)
    73  	}
    74  	defer l.Close()
    75  	fmt.Println("Listening on ", addr)
    76  	for {
    77  		conn, err := l.Accept()
    78  		if err != nil {
    79  			fmt.Println("Error accepting: ", err)
    80  		}
    81  		fmt.Printf("Received message %s -> %s \n", conn.RemoteAddr(), conn.LocalAddr())
    82  		//go handleRequest(conn)
    83  	}
    84  }