golang版本的tcp协议的rpc服务

服务端代码:

package main

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

//自己的数据类
type MyMath struct{
	
}

//加法--只能两个参数
func (mm *MyMath) Add(num map[string]int,reply *int) error {
    *reply = num["num1"] + num["num2"]
    return nil
}

//减法--只能两个参数
func (mm *MyMath) Sub(num map[string]int,reply *int) error {
    *reply = num["num1"] - num["num2"]
    return nil
}

func main() {
	//注册MyMath类,以代客户端调用
    rpc.Register(new(MyMath))
    listener, err := net.Listen("tcp", ":1215")
    if err != nil {
        log.Fatal("listen error:", err)
    }
    for {
        conn, err := listener.Accept()
        if err != nil {
            continue
        }
		//新协程来处理
        go rpc.ServeConn(conn)
    }
}

客户端代码:

package main

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

//自己的数据类
type MyMath struct{
	
}

//加法--只能两个参数
func (mm *MyMath) Add(num map[string]int,reply *int) error {
    *reply = num["num1"] + num["num2"]
    return nil
}

//减法--只能两个参数
func (mm *MyMath) Sub(num map[string]int,reply *int) error {
    *reply = num["num1"] - num["num2"]
    return nil
}

func main() {
	//注册MyMath类,以代客户端调用
    rpc.Register(new(MyMath))
    listener, err := net.Listen("tcp", ":1215")
    if err != nil {
        log.Fatal("listen error:", err)
    }
    for {
        conn, err := listener.Accept()
        if err != nil {
            continue
        }
		//新协程来处理
        go rpc.ServeConn(conn)
    }
}

对比之现http协议的区别,服务端采用了TCP协议,然后需要自己控制连接,当有客户端连接上来后,我们需要把这个连接交给rpc来处理,而客户端唯一的区别一个是DialHTTP,一个是Dial(tcp),其他处理一模一样.

此条目发表在 网站开发 分类目录,贴了 , 标签。将固定链接加入收藏夹。

评论功能已关闭。