Categorygithub.com/rsocket/rsocket-go
modulepackage
0.8.14
Repository: https://github.com/rsocket/rsocket-go.git
Documentation: pkg.go.dev

# README

rsocket-go

logo

GitHub Workflow Status codecov Go Report Card GoDoc License GitHub Release

rsocket-go is an implementation of the RSocket protocol in Go.

Features

  • Design For Golang.
  • Thin reactive-streams implementation.
  • Simulate Java SDK API.
  • Fast CLI (Compatible with https://github.com/rsocket/rsocket-cli).
    • Installation: go install github.com/rsocket/rsocket-go/cmd/rsocket-cli@latest
    • Example: rsocket-cli --request -i hello_world --setup setup_me tcp://127.0.0.1:7878

Install

Minimal go version is 1.11.

$ go install github.com/rsocket/rsocket-go/cmd/rsocket-cli@latest

Quick Start

Start an echo server

package main

import (
	"context"
	"log"

	"github.com/rsocket/rsocket-go"
	"github.com/rsocket/rsocket-go/payload"
	"github.com/rsocket/rsocket-go/rx/mono"
)

func main() {
	err := rsocket.Receive().
		Acceptor(func(ctx context.Context, setup payload.SetupPayload, sendingSocket rsocket.CloseableRSocket) (rsocket.RSocket, error) {
			// bind responder
			return rsocket.NewAbstractSocket(
				rsocket.RequestResponse(func(msg payload.Payload) mono.Mono {
					return mono.Just(msg)
				}),
			), nil
		}).
		Transport(rsocket.TCPServer().SetAddr(":7878").Build()).
		Serve(context.Background())
	log.Fatalln(err)
}

Connect to echo server

package main

import (
	"context"
	"log"

	"github.com/rsocket/rsocket-go"
	"github.com/rsocket/rsocket-go/payload"
)

func main() {
	// Connect to server
	cli, err := rsocket.Connect().
		SetupPayload(payload.NewString("Hello", "World")).
		Transport(rsocket.TCPClient().SetHostAndPort("127.0.0.1", 7878).Build()).
		Start(context.Background())
	if err != nil {
		panic(err)
	}
	defer cli.Close()
	// Send request
	result, err := cli.RequestResponse(payload.NewString("你好", "世界")).Block(context.Background())
	if err != nil {
		panic(err)
	}
	log.Println("response:", result)
}

NOTICE: more server examples are Here

Advanced

rsocket-go provides TCP/Websocket transport implementations by default. Since v0.6.0, you can use core package to implement your own RSocket transport. I created an example project which show how to implement an unofficial QUIC transport. You can see rsocket-transport-quic if you are interested.

TODO

  • Wiki
  • UT: 90% coverage

# Packages

Package balancer defines APIs for load balancing in RSocket.
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
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

Connect create a new RSocket client builder with default settings.
FireAndForget register request handler for FireAndForget.
GetAddr returns the address info of given RSocket.
MetadataPush register request handler for MetadataPush.
NewAbstractSocket returns an abstract implementation of RSocket.
Receive receives server connections from client RSockets.
RequestChannel register request handler for RequestChannel.
RequestResponse register request handler for RequestResponse.
RequestStream register request handler for RequestStream.
TCPClient creates a new TCPClientBuilder.
TCPServer creates a new TCPServerBuilder.
UnixClient creates a new UnixClientBuilder.
UnixServer creates a new UnixServerBuilder.
WebsocketClient creates a new WebsocketClientBuilder.
WebsocketServer creates a new WebsocketServerBuilder.
WithClientResumeToken creates a resume token generator.
WithServerResumeSessionDuration sets resume session duration for RSocket server.

# Constants

DefaultPort is the default port RSocket used.
DefaultUnixSockPath is the default UDS sock file path.
ErrorCodeApplicationError means application layer logic generating a Reactive Streams onError event.
ErrorCodeCanceled means the Responder canceled the request but may have started processing it (similar to REJECTED but doesn't guarantee lack of side-effects).
ErrorCodeConnectionClose means the connection is being terminated.
ErrorCodeConnectionError means the connection is being terminated.
ErrorCodeInvalid means the request is invalid.
ErrorCodeInvalidSetup means the setup frame is invalid for the server.
ErrorCodeRejected means Responder reject it.
ErrorCodeRejectedResume means server rejected the resume, it can specify the reason in the payload.
ErrorCodeRejectedSetup means server rejected the setup, it can specify the reason in the payload.
ErrorCodeUnsupportedSetup means some (or all) of the parameters specified by the client are unsupported by the server.

# Structs

TCPClientBuilder provides builder which can be used to create a client-side TCP transport easily.
TCPServerBuilder provides builder which can be used to create a server-side TCP transport easily.
UnixClientBuilder provides builder which can be used to create a client-side UDS transport easily.
UnixServerBuilder provides builder which can be used to create a server-side UDS transport easily.
WebsocketClientBuilder provides builder which can be used to create a client-side Websocket transport easily.
WebsocketServerBuilder provides builder which can be used to create a server-side Websocket transport easily.

# Interfaces

Client is Client Side of a RSocket socket.
ClientBuilder can be used to build a RSocket client.
ClientStarter can be used to start a client.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
ToClientStarter is used to build a RSocket client with custom Transport.
No description provided by the author

# Type aliases

No description provided by the author
ClientSocketAcceptor is alias for RSocket handler function.
Aliases for Error defines.
Aliases for Error defines.
No description provided by the author
No description provided by the author
No description provided by the author