golang java rpc_golang两种调用rpc的方法

本文实例讲述了golang两种调用rpc的方法。分享给大家供大家参考,具体如下:

golang的rpc有两种方法进行调用,一种是rpc例子中给的:

package main

import (

"net/rpc"

"net/http"

"log"

"net"

"time"

)

type Args struct {

A, B int

}

type Arith int

func (t *Arith) Multiply(args *Args, reply *([]string)) error {

*reply = append(*reply, "test")

return nil

}

func main() {

arith := new(Arith)

rpc.Register(arith)

rpc.HandleHTTP()

l, e := net.Listen("tcp", ":1234")

if e != nil {

log.Fatal("listen error:", e)

}

go http.Serve(l, nil)

time.Sleep(5 * time.Second)

client, err := rpc.DialHTTP("tcp", "127.0.0.1" + ":1234")

if err != nil {

log.Fatal("dialing:", err)

}

args := &Args{7,8}

reply := make([]string, 10)

err = client.Call("Arith.Multiply", args, &reply)

if err != nil {

log.Fatal("arith error:", err)

}

log.Println(reply)

}

另一种是使用NewServer

这种是当rpc已经注册的时候就要使用了另外一种了。即一个server只能在DefaultRPC中注册一种类型。

当Server使用rpc.NewServer的时候,client也需要进行下改动了

package main

import (

"net/rpc"

//"net/http"

"log"

"net"

"time"

)

type Args struct {

A, B int

}

type Arith int

func (t *Arith) Multiply(args *Args, reply *([]string)) error {

*reply = append(*reply, "test")

return nil

}

func main() {

newServer := rpc.NewServer()

newServer.Register(new(Arith))

l, e := net.Listen("tcp", "127.0.0.1:1234") // any available address

if e != nil {

log.Fatalf("net.Listen tcp :0: %v", e)

}

go newServer.Accept(l)

newServer.HandleHTTP("/foo", "/bar")

time.Sleep(2 * time.Second)

address, err := net.ResolveTCPAddr("tcp", "127.0.0.1:1234")

if err != nil {

panic(err)

}

conn, _ := net.DialTCP("tcp", nil, address)

defer conn.Close()

client := rpc.NewClient(conn)

defer client.Close()

args := &Args{7,8}

reply := make([]string, 10)

err = client.Call("Arith.Multiply", args, &reply)

if err != nil {

log.Fatal("arith error:", err)

}

log.Println(reply)

}

第二个例子中的

newServer.HandleHTTP("/foo", "/bar")

可以任意设置,第一个例子其实是设置了默认的两个

这里也顺便将reply作为[]slice的例子给演示了下

希望本文所述对大家Go语言程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9、C语言 —— 指针的用处

为什么80%的码农都做不了架构师&#xff1f;>>> 1、用函数实现两个数的交换 ‍‍在没用函数之前&#xff0c;可以这样实现‍‍#include <stdio.h>int main() {int a 3;int b 7;int c;printf("交换前&#xff0c;a%d&#xff0c;b%d\n", a, b); …

内核中的竞争状态和互斥(简述)

以下内容源于朱有鹏《物联网大讲堂》课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 一、概念 &#xff08;1&#xff09;竞争状态&#xff08;简称竟态&#xff09;&#xff1b; &#xff08;2&#xff09;临界段&#xff08;某一段代码&#xff0c;该代码有可能…

MenuetOS

MenuetOS由芬兰人Ville Turjanmaa开发&#xff0c;是一个操作系统&#xff0c;用于和IBM PC兼容的电脑。 它由汇编语言写成&#xff0c;可以存入一只1.44MB的软盘中。 Menuet OS 的32位版本Menuet32使用GNU通用公共许可证发放&#xff0c;但64位版本Menuet64使用自己的协议发放…

php是一种,PHP是一种什么型的语言:()

案例分析一&#xff1a;假定CPU的主频是500MHz。硬盘采用DMA方式进行数据传送&#xff0c;其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过。如果CPU在DMA初始化设置和启动硬盘操作等方面用了1000个时钟周期&#xff0c;并且在DMA传送完成后的中断…

java动态代理二cglib

2019独角兽企业重金招聘Python工程师标准>>> java动态代理 转载于:https://my.oschina.net/u/1430510/blog/290215

spring心得6--自动装配知识点讲解及案例分析

1.自动装配&#xff1a; spring3.2以上版本有四种自动装配类型&#xff1a; 1&#xff09;.byName:寻找和属性名相同的bean,若找不到&#xff0c;则装不上。 2&#xff09;.byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。 3&#xff09;.constructor:按照参数…

中断的上下半部

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 前言 因为输入类设备的输入都是异步事件&#xff0c;因此一般使用中断来处理和响应。 中断处理程序处于中断上下文中&#xff0c;不能和用户空间数据交互&#xff08;不能使用copy_to(from)_usr函数…

arrayPointer

1,分别使用指针加减 int wages[2] {100000000,20000000}; int *pw wages or int *pw &wages[0] 表示指针指向数组的首地址; pw表示地址,*pw表示取值,new分配的动态数组时 指针名称当数组名称使用eg pw[0],pw[2]分别表示指向数组wages的2个数组的元素值; 我们已知pw表示此…

php抓取动态数据,php+ajax实现无刷新动态加载数据技术

我们浏览有些网页的时候&#xff0c;当拉动浏览器的滚动条时到页底时&#xff0c;页面会继续自动加载更多内容供用户浏览。这种技术我暂且称它为滚屏加载技术。我们发现很多网站用到这种技术&#xff0c;必应图片搜索、新浪微博、QQ空间等将该技术应用得淋漓尽致。滚屏加载技术…

图片播放器小项目(详解)

以下内容源于朱有鹏《物联网大讲堂》课程的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。一、开始动手写代码 1、Makefile介绍 &#xff08;1&#xff09;这是一个通用的项目管理的Makefile体系&#xff0c;自己写的&#xff08;有子文件夹组织的&#xff09;项目可以…

基于linux-2.6.32.2的servfox移植

说明&#xff1a;这篇文章是本人在做基于web客户端的远程监控系统课题期间&#xff0c;在移植servfox应用服务程序费了很大周折&#xff0c;所以写下的。 只是介绍了基于arm的servfox移植【因为其他部分的移植没有遇到过错误】 前言&#xff1a; 如何移植基于linux的USB摄像头驱…

Telnet远程访问思科交换机、路由器

一、实验目的Telnet远程访问思科交换机、路由器二、实验拓扑三、实验步骤1、PC1远程管理S11&#xff09;配置交换机的管理IPS1(config)#int vlan 1S1(config-if)#ip add 192.168.1.100 255.255.255.0S1(config-if)#no shu2&#xff09;开启S1的telnet远程管理服务S1(config)#li…

php redis 队列,Redis 实现队列

## Redis 实现队列Redis 实现队列场景说明&#xff1a;用于处理比较耗时的请求&#xff0c;例如批量发送邮件&#xff0c;如果直接在网页触发执行发送&#xff0c;程序会出现超时高并发场景&#xff0c;当某个时刻请求瞬间增加时&#xff0c;可以把请求写入到队列&#xff0c;后…

offsetTop测试见解

offsetTop一开始以为只要容器内div的top定位为负就行&#xff0c;结果今天刚做了个demo&#xff0c;发现好像不是那么回事&#xff0c;于是经过各种测试&#xff0c;得出了一些结论&#xff0c;结论看demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" &qu…

[置顶]       cocos2d-x 手游源码站

尊重开发者的劳动成果&#xff0c;转载的时候请务必注明出处&#xff1a;http://blog.csdn.net/haomengzhu/article/details/37829061 1、魔幻方块 链接&#xff1a;魔幻方块源码关键词&#xff1a;魔幻方块源码 源代码 Cocos2d-x2.0 游戏源码 益智 休闲 游戏 游戏类型&#xf…

include “ “ 与 include < > 的区别

#include <>格式&#xff1a;引用标准库头文件&#xff0c;编译器从标准库目录开始搜索。 #incluce " "格式&#xff1a;引用非标准库的头文件&#xff0c;编译器从用户的工作目录开始搜索&#xff0c;如果找不到&#xff0c;再到标准位置寻找。 预处理器发现…

php 字符串的比较大小,php怎么比较两个字符串的大小

比较字符串是任何编程语言的字符串处理功能中重要的特性之一。在PHP中除了可以使用比较运算符号(、)加以比较外&#xff0c;还提供了一系列的比较函数&#xff0c;使PHP可以进行更复杂的字符串比较。如strcmp()、strcasecmp()和strnatcmp()等函数。1、按字节顺序进行字符串比较…

Android SDK开发包国内下载地址

原帖地址&#xff1a;http://www.cnblogs.com/bjzhanghao/archive/2012/11/14/2769409.html 不知道是因为最近kaihui还是怎么的&#xff0c;打开android sdk官方网站特别的慢&#xff0c;想下载最新版本的platform几乎变成不可能完成的任务&#xff0c;不知道为什么Google不像…

SharePoint 2013 Workflow - Advanced Workflow Debugging with Fiddler

来自&#xff1a;Andrew Connell [MVP SharePoint] | 时间&#xff1a;2012-07-18 19:26:30 原文链接&#xff1a; http://www.andrewconnell.com/blog/archive/2012/07/18/sharepoint-2013-workflow-advanced-workflow-debugging-with-fiddler.aspx In previous posts Iv…

调试技巧——宏定义开关和printf

转自http://blog.csdn.net/guanyasu/article/details/51866984 #ifndef __CONFIG_H__ #define __CONFIG_H__#define DEBUG/*#undef DEBUG */#ifdef DEBUG #define debug(...) \{\fprintf(stderr,"[DEBUG] [%s:%s:%d]",__FILE__,__FUNCTION__,__LINE__);\fprin…