All Projects → rsocket → Rsocket Go

rsocket / Rsocket Go

Licence: apache-2.0
rsocket-go implementation

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Labels

Projects that are alternatives of or similar to Rsocket Go

Purescript Flare
A special-purpose UI library for Purescript
Stars: ✭ 272 (-16.31%)
Mutual labels:  reactive
Aecor
Pure functional event sourcing runtime
Stars: ✭ 299 (-8%)
Mutual labels:  reactive
Awesome Rxjs
A collection of awesome RxJS resources
Stars: ✭ 314 (-3.38%)
Mutual labels:  reactive
Reactive Forms
(Angular Reactive) Forms with Benefits 😉
Stars: ✭ 276 (-15.08%)
Mutual labels:  reactive
Vertx Examples
Vert.x examples
Stars: ✭ 3,202 (+885.23%)
Mutual labels:  reactive
Vertx Jooq
A jOOQ-CodeGenerator to create vertx-ified DAOs and POJOs.
Stars: ✭ 299 (-8%)
Mutual labels:  reactive
Rxkprefs
🛠 A small Kotlin library to make shared preferences easy + RxJava and Coroutines support
Stars: ✭ 264 (-18.77%)
Mutual labels:  reactive
Nettosphere
A Java WebSocket/HTTP server based on the Atmosphere and Netty Framework
Stars: ✭ 321 (-1.23%)
Mutual labels:  reactive
Effector
The state manager ☄️
Stars: ✭ 3,572 (+999.08%)
Mutual labels:  reactive
Fritz2
Easily build reactive web-apps in Kotlin based on flows and coroutines.
Stars: ✭ 308 (-5.23%)
Mutual labels:  reactive
Mobx Keystone
A MobX powered state management solution based on data trees with first class support for Typescript, support for snapshots, patches and much more
Stars: ✭ 284 (-12.62%)
Mutual labels:  reactive
Spark Notebook
Interactive and Reactive Data Science using Scala and Spark.
Stars: ✭ 3,081 (+848%)
Mutual labels:  reactive
Entwine
Testing tools and utilities for Apple's Combine framework.
Stars: ✭ 306 (-5.85%)
Mutual labels:  reactive
Firefly
Firefly is an asynchronous web framework for rapid development of high-performance web application.
Stars: ✭ 277 (-14.77%)
Mutual labels:  reactive
Vueflux
♻️ Unidirectional State Management Architecture for Swift - Inspired by Vuex and Flux
Stars: ✭ 315 (-3.08%)
Mutual labels:  reactive
Radioactive State
☢ Make Your React App Truly Reactive!
Stars: ✭ 273 (-16%)
Mutual labels:  reactive
Reflex Dom
Web applications without callbacks or side-effects. Reflex-DOM brings the power of functional reactive programming (FRP) to the web. Build HTML and other Document Object Model (DOM) data with a pure functional interface.
Stars: ✭ 301 (-7.38%)
Mutual labels:  reactive
Mikado
Mikado is the webs fastest template library for building user interfaces.
Stars: ✭ 323 (-0.62%)
Mutual labels:  reactive
Reactive Practice At Taobao
♨️ Reactive @ 淘宝 | Reactive实践、推动、落地的记录与大会分享 | Flow Arch(流式架构)/Reactive Programming(RP/反应式编程)
Stars: ✭ 314 (-3.38%)
Mutual labels:  reactive
Rxgps
Finding current location cannot be easier on Android !
Stars: ✭ 307 (-5.54%)
Mutual labels:  reactive

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.
IT IS UNDER ACTIVE DEVELOPMENT, APIs are unstable and maybe change at any time until release of v1.0.0.

Features

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

Install

Minimal go version is 1.11.

$ go get -u github.com/rsocket/rsocket-go

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
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].