https://github.com/rsocket/rsocket-go
rsocket-go implementation
https://github.com/rsocket/rsocket-go
go golang reactive rsocket
Last synced: 9 months ago
JSON representation
rsocket-go implementation
- Host: GitHub
- URL: https://github.com/rsocket/rsocket-go
- Owner: rsocket
- License: apache-2.0
- Created: 2017-02-14T11:53:52.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2025-02-07T03:39:39.000Z (12 months ago)
- Last Synced: 2025-04-10T10:09:57.713Z (10 months ago)
- Topics: go, golang, reactive, rsocket
- Language: Go
- Homepage:
- Size: 6.44 MB
- Stars: 516
- Watchers: 25
- Forks: 45
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# rsocket-go


[](https://codecov.io/gh/rsocket/rsocket-go)
[](https://goreportcard.com/report/github.com/rsocket/rsocket-go)
[](https://godoc.org/github.com/rsocket/rsocket-go)

[](https://github.com/rsocket/rsocket-go/releases)
> rsocket-go is an implementation of the [RSocket](http://rsocket.io/) protocol in Go.
## Features
- Design For Golang.
- Thin [reactive-streams](http://www.reactive-streams.org/) implementation.
- Simulate Java SDK API.
- Fast CLI (Compatible with [https://github.com/rsocket/rsocket-cli](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***.
```shell
$ go install github.com/rsocket/rsocket-go/cmd/rsocket-cli@latest
```
## Quick Start
> Start an echo server
```go
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
```go
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](examples/echo/echo.go)
## 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](https://en.wikipedia.org/wiki/QUIC) transport.
You can see [rsocket-transport-quic](https://github.com/jjeffcaii/rsocket-transport-quic) if you are interested.
## TODO
- [ ] Wiki
- [ ] UT: 90% coverage