我有一个python服务器通过JSON-RPC提供响应。以下是来自服务器的示例响应。
'{"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)
}
但是,当我运行此客户端时,它不会在params中发送任何内容。相反,它发送的是空参数,如下所示:
'{"method":"echo","params":[{}],"id":0}\n
有人能告诉我我犯了什么错误吗?我是go语言的新手。
谢谢。
发布于 2015-04-08 09:29:23
我认为使用go提供的客户端是不可能的,因为私有clientRequest
结构目前被定义为:
type clientRequest struct {
Method string `json:"method"`
Params [1]interface{} `json:"params"`
Id uint64 `json:"id"`
}
您作为args
传递给Call
的内容将被粘贴到Params
中,请注意该结构中没有“版本json:"jsonrpc"
”。
AFAICT (这可能是错的,这是我第一次读这段代码)你需要实现你自己的ClientCodec。您可以将大部分(全部)部分复制到stdlib中,并将该字段添加到上面的clientRequest
中。;-)
https://stackoverflow.com/questions/29479360
复制相似问题