Thanks to visit codestin.com
Credit goes to github.com

Skip to content

xmopen/gorpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

一、使用Demo.

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/xmopen/gorpc/pkg/client"
	"github.com/xmopen/gorpc/pkg/server"
)

func main() {

	// test git add.1
	go func() {
		s := server.NewServer()
		s.SetTrace(true)
		s.RegisterName("RPCServer", new(RPCServer), "")
		if err := s.Server("tcp", ":8899"); err != nil {
			log.Fatalln(err)
		}
		fmt.Println("server starting...")
	}()

	time.Sleep(1 * time.Second)
	// 构造Client.
	c, err := client.NewClient("tcp", ":8899", nil)
	c.Trace = true
	if err != nil {
		log.Fatalln(err)
	}
	args := &Args{
		Age:  100,
		Name: "张三",
	}
	response := &Response{}
	err = c.Call(context.Background(), "RPCServer", "Add", args, response)
	if err != nil {
		// timeout.
		log.Fatalln(err)
	}
}

type Args struct {
	Name string
	Age  int64
}

type Response struct {
	Result string
	Age    int64
	Data   struct {
		List []int
	}
}

// RPCServer 服务.
type RPCServer struct {
}

func (r *RPCServer) Add(c context.Context, args *Args, res *Response) error {
	res.Result = "hello word" + args.Name
	res.Age = 10 * args.Age
	if res.Data.List == nil {
		res.Data.List = make([]int, 0, 10)
	}
	for i := 0; i < 10; i++ {
		res.Data.List = append(res.Data.List, i)
	}
	//time.Sleep(2 * time.Second)
	return nil
}

二、自定义协议

image-20220917221154256

消息的组成部分:

  • 第一个字节:魔数
  • 第二个字节:版本
  • 第三个字节:请求类型
  • 第四个字节:超时控制
  • 第五个字节到第八个字节:payload length,请求体长度
  • 第9个字节到第12个字节:data length 相应长度
  • 第13个字节到第16个字节:请求服务名称长度
  • 第17个字节到第20个字节:请求方法名称长度
  • sl+ml+pl+dl 长度字节就是本次请求内容,依次为服务名称、方法名称、请求体、响应体。

About

gorpc

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages