繁体   English   中英

JSON RPC客户端Go

[英]JSON RPC Client Go

我有一个通过JSON-RPC提供响应的python服务器。 这是来自服务器的示例响应。

'{"jsonrpc": "2.0", "result": "Peer 1: local 10.10.0.2  remote 10.10.0.1  state CONNECT\\nPeer 2: local 10.10.0.18  remote 10.10.0.17  state ESTABLISHED\\nPeer 3: local 10.10.0.10  remote 10.10.0.9  state ESTABLISHED", "id": "839732f9-cf36-46ff-8b9b-6120250d9ce5"}'

这是我需要发送到服务器的请求:

'{"method":"echo","jsonrpc":"2.0","params":["test_params"],"id":"839732f9-cf36-46ff-8b9b-6120250d9ce5"}'

这是我使用go语言的客户:

package main

import (
    "fmt"
    "log"
    "net"
    "net/rpc/jsonrpc"
)
type Args struct {
    jsonrpc, id string
}

func main() {
    conn, err := net.Dial("tcp", "11.21.22.221:8080")
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    args := Args{"2.0", "d87198f0-af92-49f8-9a7d-ab8bed5c4d17"}
    var reply string

    c := jsonrpc.NewClient(conn)

    err = c.Call("echo", args, &reply)
    if err != nil {
        log.Fatal("error:", err)
    }
    fmt.Printf("Response: %d", reply)
}

但是,当我运行此客户端时,它没有在参数中发送任何内容。 相反,它发送的空参数是这样的:

'{"method":"echo","params":[{}],"id":0}\n

有人可以帮我说一下我在犯什么错误吗? 我是语言新手。

谢谢。

我认为您无法使用go提供的客户端来执行操作,因为私有clientRequest结构当前定义为:

    type clientRequest struct {
        Method string         `json:"method"`
        Params [1]interface{} `json:"params"`
        Id     uint64         `json:"id"`
    }

您以args形式传递给Call被固定在Params并请注意在该结构内部如何没有“ Version`json:“ jsonrpc”``”。

AFAICT(可能是错误的,这是我第一次阅读此代码),您需要实现自己的ClientCodec 您可能clientRequest从stdlib中复制大部分(全部)部分,并将字段添加到上面的clientRequest ;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM