日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang java rpc_golang两种调用rpc的方法

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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語言程序設計有所幫助。

總結

以上是生活随笔為你收集整理的golang java rpc_golang两种调用rpc的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。