tcp

package
v1.2.17 Latest Latest
Warning

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

Go to latest
Published: Jun 24, 2020 License: MIT Imports: 7 Imported by: 0

README

TCP

基于底层的 tcp 封装,有 客户端和服务端

TIPS: 封装未完成,请勿使用

客户端 Client

import "github.com/go-eyas/toolkit/tcp"

client, err := tcp.NewClient(&tcp.Config{
	Network: "tcp",
	Addr:    ":6600",

	// 解析私有协议为结构体,如果当前没有解析到,返回nil
	Parser: func(conn *tcp.Conn, bt []byte) (interface{}, error) {
		return nil, nil
	},
	
	// 将数据转换成字节数组,发送时就发该段数据
	Packer: func(data interface{}) ([]byte, error) {
		return nil, nil
	},
})
if err != nil {
	t.Fatal(err)
}

// 发送数据
err = client.Send(&tcp.Message{
	Data: []byte("hello world1"),
})

服务端 Server

import "github.com/go-eyas/toolkit/tcp"

server, err := tcp.NewServer(&tcp.Config{
	Network: "tcp",
	Addr:    ":6600",

	// 解析私有协议为结构体,如果当前没有解析到,返回nil
	Parser: func(conn *tcp.Conn, bt []byte) (interface{}, error) {
		return nil, nil
	},
	
	// 将数据转换成字节数组,发送时就发该段数据
	Packer: func(data interface{}) ([]byte, error) {
		return nil, nil
	},
})

if err != nil {
	panic(err)
}

ch := server.Receive()

for data := range ch {
	fmt.Printf("receive: %v", data.Data)
	err := data.Response(map[string]interface{}{
		"hello": "world",
	})
	if err != nil {
		panic(err)
	}
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Packer

func Packer(data interface{}) ([]byte, error)

打包

func Parser

func Parser(conn *Conn, bt []byte) (interface{}, error)

Types

type Client

type Client struct {
	Conn   *Conn
	Config *Config
	// contains filtered or unexported fields
}

func NewClient

func NewClient(conf *Config) (*Client, error)

func (*Client) Receive

func (c *Client) Receive() <-chan *Message

func (*Client) Send

func (c *Client) Send(msg *Message) error

type Config

type Config struct {
	Addr    string
	Network string
	Packer  func(interface{}) ([]byte, error)        // 将传入的对象数据,根据私有协议封装成字节数组,用于发送到tcp连接
	Parser  func(*Conn, []byte) (interface{}, error) // 将收到的数据包,根据私有协议转换成具体数据,在这里处理粘包,半包等数据包问题,返回自定义的数据
}

Config 配置项

type Conn

type Conn struct {
	ID   uint64
	Conn net.Conn
	// contains filtered or unexported fields
}

func (*Conn) Destroy

func (conn *Conn) Destroy()

func (*Conn) Send

func (conn *Conn) Send(msg *Message) error

type Message

type Message struct {
	Data interface{}
	Conn *Conn
}

func (*Message) Response

func (m *Message) Response(data interface{}) error

type Server

type Server struct {
	Listener net.Listener
	Sockets  map[uint64]*Conn

	Config *Config
	// contains filtered or unexported fields
}

Server 服务器

func NewServer

func NewServer(conf *Config) (*Server, error)

func (*Server) Accept

func (sv *Server) Accept()

func (*Server) Receive

func (sv *Server) Receive() <-chan *Message

func (*Server) Send

func (sv *Server) Send(conn *Conn, msg *Message) error

Jump to

Keyboard shortcuts

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