Need help with go-netty?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

go-netty
238 Stars 53 Forks Apache License 2.0 47 Commits 0 Opened issues

Description

Extensible network application framework inspired by netty

Services available

!
?

Need anything else?

Contributors list

# 148,570
C#
kcp
Go
Shell
47 commits

GO-NETTY

GoDoc license-Apache 2 Go Report Card Build Status Coverage Status

中文介绍

Introduction

go-netty is heavily inspired by netty

Feature

  • Extensible transport support, default support TCP, UDP, QUIC, KCP, Websocket
  • Extensible codec support
  • Based on responsibility chain model
  • Zero-dependency

Documentation

Examples

Quick Start

package main

import ( "fmt" "strings"

"github.com/go-netty/go-netty"
"github.com/go-netty/go-netty/codec/format"
"github.com/go-netty/go-netty/codec/frame"

)

func main() { // child pipeline initializer var childInitializer = func(channel netty.Channel) { channel.Pipeline(). // the maximum allowable packet length is 128 bytes,use \n to split, strip delimiter AddLast(frame.DelimiterCodec(128, "\n", true)). // convert to string AddLast(format.TextCodec()). // LoggerHandler, print connected/disconnected event and received messages AddLast(LoggerHandler{}). // UpperHandler (string to upper case) AddLast(UpperHandler{}) }

// create bootstrap & listening & accepting
netty.NewBootstrap(netty.WithChildInitializer(childInitializer)).
    Listen(":9527").Sync()

}

type LoggerHandler struct {}

func (LoggerHandler) HandleActive(ctx netty.ActiveContext) { fmt.Println("go-netty:", "->", "active:", ctx.Channel().RemoteAddr()) // write welcome message ctx.Write("Hello I'm " + "go-netty") }

func (LoggerHandler) HandleRead(ctx netty.InboundContext, message netty.Message) { fmt.Println("go-netty:", "->", "handle read:", message) // leave it to the next handler(UpperHandler) ctx.HandleRead(message) }

func (LoggerHandler) HandleInactive(ctx netty.InactiveContext, ex netty.Exception) { fmt.Println("go-netty:", "->", "inactive:", ctx.Channel().RemoteAddr(), ex) // disconnected,the default processing is to close the connection ctx.HandleInactive(ex) }

type UpperHandler struct {}

func (UpperHandler) HandleRead(ctx netty.InboundContext, message netty.Message) { // text to upper case text := message.(string) upText := strings.ToUpper(text) // write the result to the client ctx.Write(text + " -> " + upText) }

use Netcat to send message

bash
$ echo -n -e "Hello Go-Netty\nhttps://go-netty.com\n" | nc 127.0.0.1 9527
Hello I'm go-netty
Hello Go-Netty -> HELLO GO-NETTY
https://go-netty.com -> HTTPS://GO-NETTY.COM

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.