Skip to content

Commit

Permalink
Adds simple RPC example.
Browse files Browse the repository at this point in the history
  • Loading branch information
zeptonaut committed Feb 10, 2015
1 parent 205522e commit 443ffae
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 1 deletion.
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,10 @@
# golang-rpc-example
Example of how to make an RPC using golang
Simple server and client that communicate using Go's RPC library.

Start the server with:

go run server.go

Then start the client with:

go run client.go --factor1=12 --factor2=13
33 changes: 33 additions & 0 deletions client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package main

import (
"flag"
"fmt"
"log"
"net/rpc"

"github.com/zeptonaut/golang-rpc-example/service"
)

var server = flag.String("server_port", "localhost:9999", "Address at which to reach the server.")
var factor1 = flag.Int("factor1", 3, "First factor to multiply.")
var factor2 = flag.Int("factor2", 4, "Second factor to multiply.")

func main() {
flag.Parse()

client, err := rpc.DialHTTP("tcp", *server)
if err != nil {
log.Fatal("dialing: ", err)
}

request := &service.MultiplicationRequest{*factor1, *factor2}
response := new(service.MultiplicationResponse)

err = client.Call("MultiplicationService.Multiply", request, &response)
if err != nil {
log.Fatal("MultiplicationService error:", err)
}

fmt.Println(response.Product)
}
31 changes: 31 additions & 0 deletions server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package main

import (
"flag"
"fmt"
"log"

"net"
"net/http"
"net/rpc"

"github.com/zeptonaut/golang-rpc-example/service"
)

var port = flag.Int("port", 9999, "Port on which to start the server.")

func main() {
flag.Parse()

server := new(service.MultiplicationService)
rpc.Register(server)
rpc.HandleHTTP()

l, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))
if err != nil {
log.Fatal("Listen error:", err)
}

fmt.Printf("Serving on localhost:%d\n", *port)
http.Serve(l, nil)
}
16 changes: 16 additions & 0 deletions service/multiplication_service.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package service

type MultiplicationRequest struct {
Factor1, Factor2 int
}

type MultiplicationResponse struct {
Product int
}

type MultiplicationService struct{}

func (t *MultiplicationService) Multiply(request *MultiplicationRequest, response *MultiplicationResponse) error {
response.Product = request.Factor1 * request.Factor2
return nil
}

0 comments on commit 443ffae

Please sign in to comment.