天天看點

golang原生微服務

服務端

package main

import (
	"fmt"
	"net"
	"net/rpc"
	"net/rpc/jsonrpc"
)

type HelloWord struct {
}

func (this *HelloWord) SayHello(name string, revc *string) error {
	*revc = name + " 你好啊!"
	return nil
}

func main() {
	// 注冊一個rpc服務
	err := rpc.RegisterName("Hello", &HelloWord{})
	if err != nil {
		fmt.Println("注冊rpc失敗",err)
		return
	}
	// 啟動tcp監聽
	lisert, err := net.Listen("tcp", "127.0.0.1:8888")
	if err != nil {
		fmt.Println("啟動監聽錯誤",err)
		return
	}
	fmt.Println("等待用戶端連接配接")
	// 建立tcp連接配接
	conn, err := lisert.Accept()
	if err != nil {
		fmt.Println("建立連接配接錯誤")
		return
	}
	// 将連結轉給rpc解析收資料
	//rpc.ServeConn(conn)
	jsonrpc.ServeConn(conn)
	defer lisert.Close()
	defer conn.Close()
}
           

用戶端

package main

import (
	"fmt"
	"net/rpc/jsonrpc"
)

func main() {
	// 連接配接服務端
	server, err := jsonrpc.Dial("tcp", "127.0.0.1:8888")
	if err != nil {
		fmt.Println("連接配接服務端失敗")
		return
	}
	// 建立一個參數來接受遠端函數的傳回值
	var reply string
	//調用遠端函數
	server.Call("Hello.SayHello", "張三", &reply)
	fmt.Println(reply)
	defer server.Close()

}