All Projects → xfxdev → Xtcp

xfxdev / Xtcp

Licence: mit
A TCP Server Framework with graceful shutdown, custom protocol.

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Xtcp

Actionhero
Actionhero is a realtime multi-transport nodejs API Server with integrated cluster capabilities and delayed tasks
Stars: ✭ 2,280 (+1865.52%)
Mutual labels:  framework, server, tcp
Pnet
High level Java network library
Stars: ✭ 49 (-57.76%)
Mutual labels:  framework, tcp
Fortjs
Component based MVC web framework for nodejs targeting good code structures & modularity.
Stars: ✭ 44 (-62.07%)
Mutual labels:  framework, server
Spring Server
A framework that enables the swift creation of client-server applications.
Stars: ✭ 68 (-41.38%)
Mutual labels:  framework, server
Zeus
A high performance, cross-platform Internet Communication Engine. Developed with native socket API. Aim at handling millions of concurrent connections.
Stars: ✭ 30 (-74.14%)
Mutual labels:  server, tcp
Emodbus
Modbus library for both RTU and TCP protocols. Primarily developed on and for ESP32 MCUs.
Stars: ✭ 29 (-75%)
Mutual labels:  server, tcp
Dragon
⚡A powerful HTTP router and URL matcher for building Deno web servers.
Stars: ✭ 56 (-51.72%)
Mutual labels:  framework, server
Vibora
Fast, asynchronous and elegant Python web framework.
Stars: ✭ 5,734 (+4843.1%)
Mutual labels:  framework, server
Novuscore
A modern take on WoW emulation
Stars: ✭ 88 (-24.14%)
Mutual labels:  framework, server
Proxy
C++ TCP Proxy Server
Stars: ✭ 98 (-15.52%)
Mutual labels:  server, tcp
Simpletcp
Simple wrapper for TCP client and server in C# with SSL support
Stars: ✭ 99 (-14.66%)
Mutual labels:  server, tcp
Tinytcpserver
A small tcp server working under Mono or .NET (4.0) and provides hooks for handling data exchange with clients (works under mono and .net). Behaviour/protocol/reaction could be specified via custom C# script.
Stars: ✭ 14 (-87.93%)
Mutual labels:  server, tcp
Skillbox Chat 08 19
Skillbox demo application for the Python course
Stars: ✭ 25 (-78.45%)
Mutual labels:  server, tcp
Freedom
Freedom是一个基于六边形架构的框架,可以支撑充血的领域模型范式。
Stars: ✭ 972 (+737.93%)
Mutual labels:  framework, server
Deno Drash
A REST microframework for Deno's HTTP server with zero 3rd party dependencies.
Stars: ✭ 795 (+585.34%)
Mutual labels:  framework, server
Angel
A polished, production-ready backend framework in Dart for the VM, AOT, and Flutter.
Stars: ✭ 1,055 (+809.48%)
Mutual labels:  framework, server
Micro
Micro is a distributed cloud operating system
Stars: ✭ 10,778 (+9191.38%)
Mutual labels:  framework, server
Abc
A better Deno framework to create web application.
Stars: ✭ 514 (+343.1%)
Mutual labels:  framework, server
Spock
Another Haskell web framework for rapid development
Stars: ✭ 623 (+437.07%)
Mutual labels:  framework, server
Tcpbin
Very crude and poorly written HTTP(s) and SMTP bin
Stars: ✭ 85 (-26.72%)
Mutual labels:  server, tcp

xtcp

A TCP Server Framework with graceful shutdown,custom protocol.

Build Status Go Report Card GoDoc

Usage

Define your protocol format:

Before create server and client, you need define the protocol format first.

// Packet is the unit of data.
type Packet interface {
	fmt.Stringer
}

// Protocol use to pack/unpack Packet.
type Protocol interface {
	// return the size need for pack the Packet.
	PackSize(p Packet) int
	// PackTo pack the Packet to w.
	// The return value n is the number of bytes written;
	// Any error encountered during the write is also returned.
	PackTo(p Packet, w io.Writer) (int, error)
	// Pack pack the Packet to new created buf.
	Pack(p Packet) ([]byte, error)
	// try to unpack the buf to Packet. If return len > 0, then buf[:len] will be discard.
	// The following return conditions must be implement:
	// (nil, 0, nil) : buf size not enough for unpack one Packet.
	// (nil, len, err) : buf size enough but error encountered.
	// (p, len, nil) : unpack succeed.
	Unpack(buf []byte) (Packet, int, error)
}

Set your logger(optional):

func SetLogger(l Logger)

Note: xtcp will not output any log by default unless you implement your own logger.

Provide event handler:

In xtcp, there are some events to notify the state of net conn, you can handle them according your need:

const (
	// EventAccept mean server accept a new connect.
	EventAccept EventType = iota
	// EventConnected mean client connected to a server.
	EventConnected
	// EventRecv mean conn recv a packet.
	EventRecv
	// EventClosed mean conn is closed.
	EventClosed
)

To handle the event, just implement the OnEvent interface.

// Handler is the event callback.
// p will be nil when event is EventAccept/EventConnected/EventClosed
type Handler interface {
	OnEvent(et EventType, c *Conn, p Packet)
}

Create server:

// 1. create protocol and handler.
// ...

// 2. create opts.
opts := xtcp.NewOpts(handler, protocol)

// 3. create server.
server := xtcp.NewServer(opts)

// 4. start.
go server.ListenAndServe("addr")

Create client:

// 1. create protocol and handler.
// ...

// 2. create opts.
opts := xtcp.NewOpts(handler, protocol)

// 3. create client.
client := NewConn(opts)

// 4. start
go client.DialAndServe("addr")

Send and recv packet.

To send data, just call the 'Send' function of Conn. You can safe call it in any goroutines.

func (c *Conn) Send(buf []byte) error

To recv a packet, implement your handler function:

func (h *myhandler) OnEvent(et EventType, c *Conn, p Packet) {
	switch et {
		case EventRecv:
			...
	}
}

Stop

xtcp have three stop modes, stop gracefully mean conn will stop until all cached data sended.

// StopMode define the stop mode of server and conn.
type StopMode uint8

const (
	// StopImmediately mean stop directly, the cached data maybe will not send.
	StopImmediately StopMode = iota
	// StopGracefullyButNotWait stop and flush cached data.
	StopGracefullyButNotWait
	// StopGracefullyAndWait stop and block until cached data sended.
	StopGracefullyAndWait
)

Example

The example define a protocol format which use protobuf inner. You can see how to define the protocol and how to create server and client.

example

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].