GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - simia-tech/netx: Semantic addressing extention for golang's net package

BranchesTags
Open more actions menu

Latest commit

 

History

115 Commits
115 Commits

Folders and files

NameName
Last commit message
Last commit date
example
example
 
 
filter
filter
 
 
model
model
 
 
network
network
 
 
provider
provider
 
 
selector
selector
 
 
test
test
 
 
value
value
 
 
.gitignore
.gitignore
 
 
.travis.yml
.travis.yml
 
 
Gopkg.lock
Gopkg.lock
 
 
Gopkg.toml
Gopkg.toml
 
 
LICENSE
LICENSE
 
 
PRESENTATION.slide
PRESENTATION.slide
 
 
README.md
README.md
 
 
address.go
address.go
 
 
conn.go
conn.go
 
 
error.go
error.go
 
 
go.mod
go.mod
 
 
go.sum
go.sum
 
 
grpc.go
grpc.go
 
 
helper_test.go
helper_test.go
 
 
http.go
http.go
 
 
listener.go
listener.go
 
 
multi_dialer.go
multi_dialer.go
 
 
multi_dialer_test.go
multi_dialer_test.go
 
 
multicast.go
multicast.go
 
 
multicast_conn.go
multicast_conn.go
 
 
multicast_listener.go
multicast_listener.go
 
 
netx_test.go
netx_test.go
 
 

Repository files navigation

netx - Semantic addressing extention for go's net package

GoDoc Build Status

This package provides an extention of go stdlib's net package. It provides extended Listen and Dial methods in order to enabled clients and servers for semantic addressing. The returned structs implement net.Listener and net.Conn and should seamlessly integrate with your existing application.

For transport/service organisation, NATS, consul or DNSSRV can be used. An implementation of quic is in development.

The following examples require a local NATS node on port 4222.

TCP connection example

import (
  "fmt"

  "github.com/simia-tech/netx"
  _ "github.com/simia-tech/netx/network/nats"
)

func main() {
  listener, _ := netx.Listen("nats", "echo", netx.Nodes("nats://localhost:4222"))
  go func() {
    conn, _ := listener.Accept()
    defer conn.Close()

    buffer := make([]byte, 5)
    conn.Read(buffer)
    conn.Write(buffer)
  }()

  client, _ := netx.Dial("nats", "echo", netx.Nodes("nats://localhost:4222"))
  defer client.Close()

  fmt.Fprintf(client, "hello")

  buffer := make([]byte, 5)
  client.Read(buffer)

  fmt.Println(string(buffer))
  // Output: hello
}

HTTP connection example

import (
  "net/http"
  "fmt"
  "io/ioutil"

  "github.com/simia-tech/netx"
  _ "github.com/simia-tech/netx/network/nats"
)

func main() {
  listener, _ := netx.Listen("nats", "greeter", netx.Nodes("nats://localhost:4222"))

  mux := &http.ServeMux{}
  mux.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello")
  })

  server := &http.Server{Handler: mux}
  go func() {
    server.Serve(listener)
  }()

  client := &http.Client{
    Transport: netx.NewHTTPTransport("nats", netx.Nodes("nats://localhost:4222")),
  }
  response, _ := client.Get("http://greeter/hello")
  defer response.Body.Close()

  body, _ := ioutil.ReadAll(response.Body)
  fmt.Println(string(body))
  // Output: Hello
}

GRPC connection example

import (
	"fmt"
	"log"
	"time"

	"golang.org/x/net/context"
	"google.golang.org/grpc"

	"github.com/simia-tech/netx"
	_ "github.com/simia-tech/netx/network/nats"
)

type echoServer struct{}

func (e *echoServer) Echo(ctx context.Context, request *EchoRequest) (*EchoResponse, error) {
	return &EchoResponse{Text: request.Text}, nil
}

func main() {
	listener, _ := netx.Listen("nats", "echo", netx.Nodes("nats://localhost:4222"))

	server := grpc.NewServer()
	RegisterEchoServiceServer(server, &echoServer{})

	go func() {
		server.Serve(listener)
	}()

	conn, _ := grpc.Dial("echo",
		grpc.WithDialer(netx.NewGRPCDialer("nats", netx.Nodes("nats://localhost:4222"))),
		grpc.WithInsecure())

	client := NewEchoServiceClient(conn)

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	response, _ := client.Echo(ctx, &EchoRequest{Text: "Hello"})
	cancel()

	fmt.Println(response.Text)
	// Output: Hello
}

More examples

More example can be found in the example directory.

Tests

In order to run the tests, type

go test -v ./...

About

Semantic addressing extention for golang's net package

Topics

consuldnssrvgolanggrpchttpmicroservicenatsnetworking-stack

Resources

Readme
MIT license
Activity
Custom properties

Stars

9 stars

Watchers

2 watching

Forks

0 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.