tfg

package module
v0.0.0-...-994f995 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 6, 2019 License: Apache-2.0 Imports: 11 Imported by: 0

README

Welcome to tfg 👋

🏠 Homepage

Install

go get -u github.com/scriptllh/tfg

Usage

echo


package main

import (
	"fmt"
	"github.com/scriptllh/tfg"
	log "github.com/sirupsen/logrus"
	"time"
)

type HandleConn struct {
	tfg.BaseHandleConn
}

func (hc *HandleConn) PreOpen(c tfg.Conn) {
	log.Infof("pre conn open: [conn:%v]", c)
}

type req struct {
	s string
}

/**
 * req : in => 请求读出来的字节    lastRemain => 上一次read 操作没有处理完的数据
 *
 * resp: packet => 处理完后生成业务的结构数据   remain => 这一节数据不够转换成业务数据下次read的时候再处理
 *    isFinRead => 是否继续处理这次留下来的remain,如果为false,则下次数据会按顺序过来,加上这次留下的remain,且是同一个协程处理
 *         如果为true => 则下次数据不会带上remain,且下次read是下一个协程来处理
 *    isHandle => 是否有数据packet给handle执行 ,因为handle是异步执行的
 */
func (hc *HandleConn) Read(in []byte, lastRemain []byte) (packet interface{}, remain []byte, isFinRead bool, isHandle bool, err error) {
	s := string(in)
	req := &req{
		s: s,
	}
	log.Infof("read [data:%v]", req)
	return req, nil, false, true, nil
}

/**
 * req : conn => 连接    packet => read 处理过后的业务数据packet
 *
 */

func (hc *HandleConn) Handle(conn tfg.Conn, packet interface{}, err error) {
	req := packet.(*req)
	log.Infof("handle req [data:%v]", req)
	time.Sleep(time.Millisecond * time.Duration(10))
	n, err := conn.Write([]byte("tfg la la la"))
	if err != nil {
		fmt.Println(err)
		return
	}
	log.Infof("handle write [n:%v]", n)
}

func main() {
	var handleConn HandleConn
	s, err := tfg.NewServer(":6000", &handleConn, 0, tfg.RoundRobin)
	if err != nil {
		log.Errorf("new server [err:%v]", err)
		return
	}
	log.Infof("server start :%v", "6000")
	if err := s.Serve(); err != nil {
		log.Errorf("serve [err:%v]", err)
		return
	}
}


Run

git clone https://github.com/scriptllh/tfg-example.git
1. echo 
     * make dev
     * 用PacketSender访问
2. http
    * make http
    * 用Postman访问

🤝 Contributing

Contributions, issues and feature requests are welcome!
Feel free to check issues page.

Show your support

Give a ⭐️ if this project helped you!

Documentation

Overview

+build darwin netbsd freebsd openbsd dragonfly linux

Index

Constants

View Source
const (
	AVAILABLEWRITE uint32 = iota
	UNAVAILABLEWRITE
	CONN_CLOSE uint32 = iota
	CONN_OPEN
	CONN_NEEE_CLOSED
)
View Source
const (
	POLL_OPENED uint32 = iota
	POLL_CLOSED
)
View Source
const (
	CLOSED = 1
)

Variables

View Source
var (
	ErrInvalidPoolSize = errors.New("invalid size for pool")

	ErrInvalidPoolExpiry = errors.New("invalid expiry for pool")

	ErrPoolClosed = errors.New("this pool has been closed")
)
View Source
var (
	ErrInputConnWrite = errors.New("input err for conn write")
	ErrClosedPoll     = errors.New("closed for poll")
)

Functions

This section is empty.

Types

type AcceptBalance

type AcceptBalance int
const (
	Random AcceptBalance = iota
	RoundRobin
	LeastConn
)

type BaseHandleConn

type BaseHandleConn struct {
}

func (*BaseHandleConn) Handle

func (hc *BaseHandleConn) Handle(conn Conn, packet interface{}, err error)

func (*BaseHandleConn) PreOpen

func (hc *BaseHandleConn) PreOpen(c Conn)

func (*BaseHandleConn) Read

func (hc *BaseHandleConn) Read(in []byte, lastRemain []byte) (packet interface{}, remain []byte, isFinRead bool, isHandle bool, err error)

type Conn

type Conn interface {
	Write(b []byte) (int, error)
	Close() error
	LocalAddr() net.Addr
	RemoteAddr() net.Addr
	SetDeadline(t time.Time) error
	// contains filtered or unexported methods
}

type ConnManger

type ConnManger interface {
	Len() int64
	CloseAllConn()
}

type HandleConn

type HandleConn interface {
	PreOpen(c Conn)
	Read(in []byte, lastRemain []byte) (packet interface{}, remain []byte, isFinRead bool, isHandle bool, err error)
	Handle(conn Conn, packet interface{}, err error)
}

type PoolHandle

type PoolHandle struct {
	PanicHandler func(interface{})
	// contains filtered or unexported fields
}

func NewPoolHandle

func NewPoolHandle(size int, read func(in []byte, lastRemain []byte) (packet interface{},
	remain []byte, isFinRead bool, isHandle bool, err error), handle func(conn Conn, packet interface{}, err error), s *server) (*PoolHandle, error)

func NewTimingPoolHandle

func NewTimingPoolHandle(size, expiry int, read func(in []byte, lastRemain []byte) (packet interface{},
	remain []byte, isFinRead bool, isHandle bool, err error), handle func(conn Conn, packet interface{}, err error), s *server) (*PoolHandle, error)

func (*PoolHandle) Cap

func (p *PoolHandle) Cap() int

func (*PoolHandle) Free

func (p *PoolHandle) Free() int

func (*PoolHandle) Release

func (p *PoolHandle) Release() error

func (*PoolHandle) Running

func (p *PoolHandle) Running() int

type Server

type Server interface {
	Start() error
	Stop()
	Serve() error
	Listener() net.Listener
	SetPreServing(func(server Server))
}

func NewServer

func NewServer(addr string, HandleConn HandleConn, numPollEvent int, acceptBalance AcceptBalance) (Server, error)

type WorkerHandle

type WorkerHandle struct {
	// contains filtered or unexported fields
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL