https://github.com/reddec/members
multicast based distributed discovery for golang
https://github.com/reddec/members
Last synced: 10 months ago
JSON representation
multicast based distributed discovery for golang
- Host: GitHub
- URL: https://github.com/reddec/members
- Owner: reddec
- License: mit
- Created: 2019-04-15T14:00:12.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-04-16T12:39:39.000Z (about 7 years ago)
- Last Synced: 2025-03-09T00:06:49.032Z (over 1 year ago)
- Language: Go
- Size: 24.4 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Distributed multicast-based discovery
[](https://godoc.org/github.com/reddec/members)
`go get -v github.com/reddec/memebers`
* protocol independent
* supports GRPC

## Use-cases
### Automatic service definition
1. initialize node
2. make simple TCP acceptor on a random port
3. add it to local registry
4. start broadcasting and listening
```go
node := New().Start()
node.Simple("echo", func(ctx context.Context, conn net.Conn){
defer conn.Close()
io.Copy(conn, conn)
})
// do other stuff
```
### GRPC server
1. initialize node
2. create listener and add to registry
3. serve grpc server
```go
node := New().Start()
listener := node.Listen("myService")
defer listener.Close()
grpcServer.Serve(listener)
```
### Native TCP client
```go
node := New().Start()
conn, err := node.Dial("echo") // iterate over all services in loop until connected
// do some stuff
```
### GRPC client
```go
node := New().Start()
grpcConn, err := grpc.Dial("echo", node.WithGRPC())
```
## Protocol
Almost all parameters can be changed during node initialization, however, default parameters are:
* Multicast group IP: `224.0.0.145`
* Port: `33214`
* Buffer size: `8192` bytes
* TTL: `5s`
Packet data is message pack tuple:
`[ID: string, [[ServiceName: string, Port: uint16 ] ,...]]`