Skip to content

sphantix/msgpackrpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

msgpackrpc

golang msgpack codec compatible with net/rpc

Usage

Server

package main

import (
	"log"
	"net"
	"net/rpc"

	"github.com/sphantix/msgpackrpc"
)

type APIService struct{}

func (s *APIService) Hello(args string, reply *string) error {
	*reply = "Hello, " + args
	return nil
}

type AddArgs struct {
	A, B int
}

type AddReply struct {
	Result int
}

func (s *APIService) Add(args AddArgs, reply *AddReply) error {
	reply.Result = args.A + args.B
	return nil
}

func main() {
	api := new(APIService)
	rpc.Register(api)

	listener, err := net.Listen("tcp", ":1234")
	if err != nil {
		log.Fatal("Listen error:", err)
	}

	for {
		conn, err := listener.Accept()
		if err != nil {
			log.Fatal("Accept error:", err)
		}

		go rpc.ServeCodec(msgpackrpc.NewServerCodec(conn))
	}
}

Client

package main

import (
	"fmt"
	"log"
	"net"

	"github.com/sphantix/msgpackrpc"
)

type AddArgs struct {
	A, B int
}

type AddReply struct {
	Result int
}

func main() {
	// Connect to the server using TCP
	conn, err := net.Dial("tcp", "127.0.0.1:1234")
	if err != nil {
		log.Fatalf("Failed to connect to server: %v", err)
	}
	client := msgpackrpc.NewClient(conn)
	defer client.Close()

	// Call the RPC method "APIService.Hello"
	var reply string
	var args = "World"

	err = client.Call("APIService.Hello", args, &reply)
	if err != nil {
		log.Fatalf("RPC call failed: %v", err)
	}

	// Print the result
	fmt.Printf("Result of APIService.Hello: %s\n", reply) // Expected output: 15

	var addArgs = AddArgs{10, 5}
	var addReply AddReply
	err = client.Call("APIService.Add", addArgs, &addReply)
	if err != nil {
		log.Fatalf("RPC call failed: %v", err)
	}
	fmt.Printf("Result of APIService.Add: %d\n", addReply.Result) // Expected output: 15
}

Examples

code above can be found in examples

go run examples/server/server.go
go run examples/client/client.go

About

golang msgpack codec compatible with net/rpc

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages