Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/two/tspool
tcp server pool
https://github.com/two/tspool
Last synced: 3 months ago
JSON representation
tcp server pool
- Host: GitHub
- URL: https://github.com/two/tspool
- Owner: two
- License: mit
- Created: 2018-10-27T01:05:03.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2018-10-29T01:55:10.000Z (about 6 years ago)
- Last Synced: 2024-07-31T20:52:36.711Z (5 months ago)
- Language: Go
- Size: 5.86 KB
- Stars: 14
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go - tspool - A TCP Library use worker pool to improve performance and protect your server. (Networking / Transliteration)
- zero-alloc-awesome-go - tspool - A TCP Library use worker pool to improve performance and protect your server. (Networking / Transliteration)
- awesome-go-extra - tspool - 10-27T01:05:03Z|2018-10-29T01:55:10Z| (Networking / Uncategorized)
- awesome-go - tspool - tcp server pool - ★ 0 (Networking)
README
# tspool
A TCP Library use worker pool to improve performance and protect your server.[![Build Status](https://travis-ci.org/two/tspool.svg?branch=master)](https://travis-ci.org/two/tspool)
[![Code Coverage](https://codecov.io/gh/two/tspool/branch/master/graph/badge.svg)](https://codecov.io/gh/two/tspool)
[![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://opensource.org/licenses/MIT)
[![GoDoc](https://godoc.org/github.com/two/tspool?status.svg)](https://godoc.org/github.com/two/tspool)## Install
```
go get github.com/two/tspool
```## Usage
Build your server with tspool
### server
```go
package mainimport (
"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
```gopackage 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](https://github.com/two/tspool/tree/master/examples)