Golang简易版RPC实现

server

package main

import (
	"fmt"
	"net"
)

func Hello(name string) string {
	return "HelloWorld" + name
}

func main() {
	listener, err := net.Listen("tcp4", "127.0.0.1:6872")
	if err != nil {
		fmt.Println("Listen err:", err)
	}
	conn, err := listener.Accept()
	if err != nil {
		fmt.Println("Accept err:", err)
	}
	defer conn.Close()

	funcMap := make(map[string]func(string) string)
	funcMap["Hello"] = Hello

	buf := make([]byte, 1024)
	n, err := conn.Read(buf)
	if err != nil {
		fmt.Println("Read err:", err)
	}
	funcName := string(buf[:n])

	n, err = conn.Read(buf)
	if err != nil {
		fmt.Println("Read err:", err)
	}
	funcArgs := string(buf[:n])


	function := funcMap[string(funcName)]
	result := function(string(funcArgs))
	conn.Write([]byte(result))
}

client

package main

import (
	"fmt"
	"net"
	"time"
)

func main(){
	conn,err:=net.Dial("tcp4", "127.0.0.1:6872")
	if err != nil {
		fmt.Println("Dial err:", err)
	}

	conn.Write([]byte("Hello"))
	time.Sleep(1*time.Second)
	conn.Write([]byte("wxf"))

	buf := make([]byte, 1024)
	n, err := conn.Read(buf)
	if err != nil {
		fmt.Println("Read err:", err)
	}
	fmt.Println(string(buf[:n]))
}

posted @ 2021-10-08 22:03  cheems~  阅读(46)  评论(0编辑  收藏  举报