猿问

gorilla/rpc JSON RPC 服务无响应

我正在研究使用gorilla web 工具包来创建一个简单的 RPC API。我正在使用他们文档中的示例,我正在Chrome 中使用Advanced Rest Client进行测试并使用


http://localhost:1111/api/ 

并发布以下 RAW JSON 有效负载:


{"method":"HelloService.Say","params":[{"Who":"Test"}]}

这到达服务器,我在记录它时知道这一点(见下面的代码),我得到 200 OK 响应。但是我收到“响应不包含任何数据”


我期待在下面的 Say 方法中定义的 JSON 回复消息。有没有人对问题是什么有任何建议?


package main


import (

    "gorilla/mux"

    "gorilla/rpc"

    "gorilla/rpc/json"

    "log"

    "net/http"

)  


type HelloArgs struct {

    Who string

}


type HelloReply struct {

    Message string

}


type HelloService struct{}


func (h *HelloService) Say(r *http.Request, args *HelloArgs, reply *HelloReply) error {

    log.Printf(args.Who)

    reply.Message = "Hello, " + args.Who + "!"

    log.Printf(reply.Message)

    return nil

}


func main() {

    r := mux.NewRouter()    

    jsonRPC := rpc.NewServer()

    jsonCodec := json.NewCodec()

    jsonRPC.RegisterCodec(jsonCodec, "application/json")

    jsonRPC.RegisterCodec(jsonCodec, "application/json; charset=UTF-8") // For firefox 11 and other browsers which append the charset=UTF-8

    jsonRPC.RegisterService(new(HelloService), "")

    r.Handle("/api/", jsonRPC)  

    http.ListenAndServe(":1111", r)

}


jeck猫
浏览 414回答 1
1回答

婷婷同学_

这是因为 gorilla/rpc/json 实现了 JSON-RPC,它在请求中需要三个参数:method,params和id。JSON-RPC 中没有 id 的请求称为通知并且没有响应。检查规范以获取更多详细信息。因此,在您的情况下,您需要使用以下 JSON:{"method":"HelloService.Say","params":[{"Who":"Test"}], "id":"1"}
随时随地看视频慕课网APP

相关分类

Go
我要回答