新Sir

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

 

rpc服务端

复制代码
package main

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

type HelloService struct {
}

func (p *HelloService) Hello(request string, reply *string) error {
    *reply = "Hello:" + request
    return nil

}

// 给予json 编码重新实现rpc
func main() {
    rpc.RegisterName("HelloService", new(HelloService))
    listener, err := net.Listen("tcp", ":6666")
    if err != nil {
        log.Fatal("listenTCP error:", err)
    }
    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Fatal("accept error:", err)
        }
        go rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
    }

}
复制代码

 

基于jsonrpc的客户端

复制代码
package main

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

func main() {
    //conn, err := net.Dial("tcp", "119.91.140.xx:8081") // 还一个 linux 机器 开启的服务 查看 请求数据的格式
    conn, err := net.Dial("tcp", "localhost:6666")
    if err != nil {
        log.Fatal("net.Dial:", err)
    }
    client := rpc.NewClientWithCodec(jsonrpc.NewClientCodec(conn))
    var reply string
    err = client.Call("HelloService.Hello", "Stefan", &reply)

    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(reply)

}
复制代码

 

 

客户端 调用结果

 

 

 

 

客户端调用时发送的数据格式。例如,通过命令nc -l 1234在同样的端口启动一个TCP服务。然后再次执行一次RPC调用将会发现nc输出了以下的信息:

 

在linux 机器 开启一个 tpc  然后用客户端调用测试 如下

 

[root@VM-16-9-centos ~]# nc -l 8081
{"method":"HelloService.Hello","params":["Stefan"],"id":0}

 

 

这是一个JSON编码的数据,其中method部分对应要调用的由RPC服务和方法组合成的名字,params部分的第一个元素为参数,id是由调用方维护的唯一的调用编号。

 

posted on   新Sir  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
 
点击右上角即可分享
微信分享提示