首页 > 其他分享 >rpc学习--替换rpc序列化协议为json

rpc学习--替换rpc序列化协议为json

时间:2023-04-23 14:45:33浏览次数:41  
标签:nil err -- json rpc net 序列化 string

rpc概念:RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

示例代码:

package main

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

type Player struct {
    Name string `json:"name"`
    Id   int    `json:"id"`
}

func (p *Player) Info(request string, reply *string) error {
    p.Name = "Curry"
    p.Id = 1
    data, err := json.Marshal(p)
    if err != nil {
        panic(err)
    }
    *reply = "info:" + string(data) + " " + request
    return nil
}

func main() {
    //实例化一个Server
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatal(err)
    }
    //注册处理逻辑handler
    err = rpc.RegisterName("Player", &Player{})
    if err != nil {
        panic(err)
    }
    //启动服务
    for {
        conn, _ := listener.Accept() //当一个新的链接进来,
        go rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
    }

}

client端:

package main

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

func main() {
    conn, err := net.Dial("tcp", ":8080")
    if err != nil {
        panic("连接失败")
    }
    var reply = new(string)
    var client = rpc.NewClientWithCodec(jsonrpc.NewClientCodec(conn))
    err = client.Call("Player.Info", "!", reply)
    if err != nil {
        panic("调用失败")
    }
    fmt.Println(*reply)

 

标签:nil,err,--,json,rpc,net,序列化,string
From: https://www.cnblogs.com/99kol/p/17346502.html

相关文章

  • abc299-G
    题目链接:https://atcoder.jp/contests/abc299/tasks/abc299_g知识:单调栈(思想),贪心思路:枚举每一个点,维护一个栈。当这个点\(x\)之前有比它大的\(y\)(不唯一)并且y在后面还会出现,就把\(y\)删除,否则直接break,最后将\(x\)加入即可。代码:#include<bits/stdc++.h>usingnamespaces......
  • JMeter 没有jmeter.log文件问题
    使用JMeter5.5压测,想查看日志发现JMeter安装目录下的bin文件夹没有jmeter.log文件手动开启日志在JMeter的默认配置中,jmeter.log文件是不会自动生成的,需要用户手动开启。可以通过修改jmeter.properties配置文件来开启jmeter.log的生成。具体操作如下:打开jmeter.pr......
  • Vulnhub之 BoredHackerBlog: Social Network 2.0靶机详细测试过程
    Socnet作者:jasonhuawen靶机信息名称:BoredHackerBlog:SocialNetwork2.0地址:https://www.vulnhub.com/entry/boredhackerblog-social-network-20,455/识别目标主机IP地址(kali㉿kali)-[~/Desktop/Vulnhub/Socnet]└─$sudonetdiscover-ieth1-r192.168.56.0/24Cu......
  • Maven的使用
    Maven1.下载并配置下载地址:https://maven.apache.org/download.cgi?.配置环境变量新建系统变量,变量名为MAVEN_HOME,变量值为maven的安装路径编辑名为Path的系统变量,然后点击新建,输入%MAVEN_HOME%\bin配置完成,测试一下==>win+r输入cmd,在命令行输入mvn,弹出......
  • Python类变量和实例变量,傻傻分不清楚
    今日鸡汤坐看云卷云舒,静听花开花落。大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群有个叫【Chloé】的粉丝问了一个关于Python类变量和实例变量的问题,这里拿出来给大家分享下,一起学习。这个粉丝在法国留学,所以提问是英文的,当然了英文看上去也不难,有点二级英文基......
  • MAC地址详解
    MAC地址MAC地址(MediaAccessControl),即媒体访问控制地址,在不同的使用场景下有不同的别名,比如局域网地址(LANAddress),以太网地址(EthernetAddress),物理地址(PhysicalAddress),硬件地址(HardwareAddress)等。MAC地址作用于数据链路层,用来在局域网中唯一标识一个网络设备接口。网络设备制......
  • 盘点6个Pandas中批量替换字符的方法
    今日鸡汤朱雀桥边野草花,乌衣巷口夕阳斜。大家好,我是Python进阶者。一、前言前几天在Python最强王者群有个叫【dcpeng】的粉丝问了一个关于Pandas中的问题,这里拿出来给大家分享下,一起学习。想问一下我有一列编码为1,2,3,4的数据,如何将1批量换为“开心”,2批量换为“悲伤”这种字符替换呢......
  • 手把手教你开展mofish库(摸鱼库)的打包发布
    今日鸡汤商女不知亡国恨,隔江犹唱后庭花。大家好,我是我是皮皮。一、前言前几天吴老板给我推荐了一个摸鱼库,竟然是Python库,给我惊了一下,感觉应缺斯汀。要知道之前他就已经写了一篇关于摸鱼的文章,感兴趣的小伙伴,可以前往:手把手教你使用Python打造一款摸鱼倒计界面。如今他把这个摸鱼......
  • 无惧百万级并发,GaussDB(for Cassandra)让华为推送服务更快触达
    摘要:推送服务(PushKit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道。通过集成推送服务,您可以向客户端应用实时推送消息,让应用更精准触达用户,是开发者提升用户感知度和活跃度的一件利器。本文分享自华为云社区《无惧百万级并发,GaussDB(forCassandra)让华为Push推送服......
  • 盘点一份JS逆向代码转换为Python代码的教程
    今日鸡汤云母屏风烛影深,长河渐落晓星沉。大家好,我是Python进阶者。前言前几天在Python星耀和最强王者交流群里边,好几个人都在问JS逆向的视频和相关代码,看来都在学习进阶的知识,真是卷不动了。正好这几天我也在看JS的部分学习资料,看到一个还不错的案例,这里拿出来给大家分享一下,也当记......