Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xfxdev/xtcp
A TCP Server Framework with graceful shutdown, custom protocol.
https://github.com/xfxdev/xtcp
framework golang graceful server tcp
Last synced: 24 days ago
JSON representation
A TCP Server Framework with graceful shutdown, custom protocol.
- Host: GitHub
- URL: https://github.com/xfxdev/xtcp
- Owner: xfxdev
- License: mit
- Created: 2016-03-31T16:50:14.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-02-29T18:57:41.000Z (about 4 years ago)
- Last Synced: 2024-01-31T05:16:27.580Z (4 months ago)
- Topics: framework, golang, graceful, server, tcp
- Language: Go
- Homepage:
- Size: 39.1 KB
- Stars: 148
- Watchers: 14
- Forks: 32
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go-extra - xtcp - 03-31T16:50:14Z|2020-02-29T18:57:41Z| (Networking / Uncategorized)
- awesome-go-zh - xtcp
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go-cn - xtcp
- awesome-go - xtcp - | - | - | (Networking / Strings)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Uncategorized)
- awesome-go-projects - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Uncategorized)
- awesome-go-with-framework - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Strings)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go-cn - xtcp
- zero-alloc-awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go-stars - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Strings)
- awesome-go. - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Advanced Console UIs)
- awesome-go-zh - xtcp
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (<span id="网络-networking">网络 Networking</span> / <span id="高级控制台用户界面-advanced-console-uis">高级控制台用户界面 Advanced Console UIs</span>)
- awesome-go-cn - xtcp - TCP 服务器框架,支持同时全双工通信。可以优雅的关闭,自定义协议 (网络 / 高级控制台界面)
- awesome-go-with-stars - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Uncategorized)
- repo-1316-awesome-go-cn - xtcp
- repo-1211-awesome-go-cn - xtcp
- awesome-Char - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Uncategorized)
- awesome-reader - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Strings)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Strings)
- Go-awesome - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go-cn - xtcp
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Advanced Console UIs)
- awesome-go - xtcp - A TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Advanced Console UIs)
- go-awesome-cn-star - xtcp
- awesome-go - xtcp - TCP 服務器框架,支持同時全雙工通信。可以優雅的關閉,自定義協議 (網絡 / 高級控制台界面)
- awesome-go-handwritten - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Advanced Console UIs)
- awesome-go2 - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Advanced Console UIs)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Uncategorized)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. - :arrow_down:2 - :star:40 (Networking / Strings)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go - xtcp - A TCP Server Framework with simultaneous full duplex communication,graceful shutdown,custom protocol. (Networking / Advanced Console UIs)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Uncategorized)
- awesome-go-cn - xtcp
- awesome-go-cn - xtcp
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go - xtcp - TCP Server Framework with simultaneous full duplex communication, graceful shutdown, and custom protocol. (Networking / Transliteration)
- awesome-go - xtcp - A TCP Server Framework with graceful shutdown, custom protocol. - ★ 48 (Networking)
README
# xtcp
A TCP Server Framework with graceful shutdown,custom protocol.
[![Build Status](https://travis-ci.org/xfxdev/xtcp.svg?branch=master)](https://travis-ci.org/xfxdev/xtcp)
[![Go Report Card](https://goreportcard.com/badge/github.com/xfxdev/xtcp)](https://goreportcard.com/report/github.com/xfxdev/xtcp)
[![GoDoc](https://godoc.org/github.com/xfxdev/xtcp?status.svg)](https://godoc.org/github.com/xfxdev/xtcp)## Usage
### Define your protocol format:
Before create server and client, you need define the protocol format first.```go
// 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):
```go
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:```go
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.
```go
// 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:
```go
// 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:
```go
// 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.```go
func (c *Conn) Send(buf []byte) error
```To recv a packet, implement your handler function:
```go
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.
```go
// StopMode define the stop mode of server and conn.
type StopMode uint8const (
// 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](https://github.com/xfxdev/xtcp/tree/master/_example)