Popularity
0.8
Growing
Activity
0.0
Stable
8
0
1

Programming language: Go
License: MIT License
Tags: Networking    

tspool alternatives and similar packages

Based on the "Networking" category.
Alternatively, view tspool alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of tspool or a related project?

Add another 'Networking' Package

README

tspool

A TCP Library use worker pool to improve performance and protect your server.

Build Status Code Coverage License GoDoc

Install

go get github.com/two/tspool

Usage

Build your server with tspool

server

package main

import (
    "github.com/two/tspool"
    "log"
    "net"
)

func main() {
    wp, err := tspool.DefaultWorkerPool(100, 200)
    if err != nil {
        log.Fatalln(err)
    }
    server := &tspool.Server{
        Addr:          "0.0.0.0:8088",
        Handler:       handler,
        ErrHandler:    errHandler,
        WorkerPool:    wp,
        RejectHandler: rejectHandler,
    }
    err = tspool.ListenAndServe(server)
    if err != nil {
        log.Fatalln(err)
    }
}

func handler(c net.Conn) {
    addr := c.RemoteAddr()
    c.Write([]byte("hello"))
    c.Close()
    log.Println(addr.String())
}

func errHandler(c net.Conn, err string) {
    defer c.Close()
    log.Fatalln("run server error: " + err)
}

func rejectHandler(c net.Conn, err string) {
    defer c.Close()
    log.Println("reject connect error: " + err)
}

Build your tspool client


package main

import (
    "log"
    "net"
    "sync"
    "time"
)

var wg = new(sync.WaitGroup)

func main() {
    var num int = 2000
    wg.Add(num)
    for i := 0; i < num; i++ {
        go conn()
    }
    wg.Wait()
    log.Println("done")
}
func conn() {
    defer wg.Done()
    addr := "0.0.0.0:8088"
    d := net.Dialer{Timeout: 100 * time.Millisecond}
    conn, err := d.Dial("tcp", addr)
    if err != nil {
        log.Fatalln(err)
    }
    defer conn.Close()
    raddr := conn.LocalAddr()
    var r = make([]byte, 1024)
    _, err = conn.Read(r)
    if err != nil {
        log.Printf(raddr.String() + " read error: " + err.Error())
    }
    log.Printf(raddr.String() + " got " + string(r))
}

Define your own worker pool and worker

Example

example


*Note that all licence references and agreements mentioned in the tspool README section above are relevant to that project's source code only.