Categorygithub.com/simia-tech/netx
modulepackage
0.0.1
Repository: https://github.com/simia-tech/netx.git
Documentation: pkg.go.dev

# README

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 ./...

# Packages

No description provided by the author
No description provided by the author
Package model is a generated protocol buffer package.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

Dial establishs a connection on the provided network to the provided address.
DialMulticast opens a multicast connection on the provided network to the provided address.
Listen creates a listener on the provided network at the provided address.
ListenAndDialMulticast listens to the provided readAddress and dials the provided writeAddress.
ListenMulticast creates a multicast connection on the provided network at the provided address.
NewGRPCDialer returns a dialer that can be passed to the grpc.Dial function.
NewGRPCMultiDialer returns a dialer that can be passed to the grpc.Dial function.
NewHTTPMultiTransport returns a new transport instance that uses the provided MultiDialer.
NewHTTPTransport returns a new transport instance for a http client.
NewMultiDialer returns a new nulti dialer.
RandomAddress returns a random address with the provided prefix.
RegisterDial registers the provided Dial method under the provided network name.
RegisterDialMulticast registers the provided DialMulticast method under the provided network name.
RegisteredDialMulticastNetworks returns the available networks for the DialMulticast function.
RegisteredDialNetworks returns the available networks for the Dial function.
RegisteredListenMulticastNetworks returns the available networks for the ListenMulticast function.
RegisteredListenNetworks returns the available networks for the Listen function.
RegisterListen registers the provided Listen method under the provided network name.
RegisterListenMulticast registers the provided Listen method under the provided network name.

# Variables

Definition of possible errors.

# Structs

MultiDialer implements a multi dialer.

# Type aliases

DialFunc defines the signature of the Dial function.
DialMulticastFunc defines the signature of the Dial function.
ListenFunc defines the signature of the Listen function.
ListenMulticastFunc defines the signature of the ListenMulticast function.