我正在研究如何使用gorilla web toolkit创建一个简单的RPC。我使用了他们文档中的示例,并在Chrome中使用Advanced Rest Client进行测试,并使用
http://localhost:1111/api/ 并发布以下原始JSON有效负载:
{"method":"HelloService.Say","params":[{"Who":"Test"}]}这将到达服务器,我知道这一点,因为我正在记录它(参见下面的代码),我得到了一个200OK响应。然而,我得到的结果是"Response I contain data“
我期待在下面的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)
}发布于 2013-10-26 04:09:47
这是因为gorilla/rpc/json实现了JSON-RPC,请求中需要三个参数:方法、参数和id。
在JSON-RPC中没有id的请求被称为通知,并且没有响应。
有关更多详细信息,请查看specification。
因此,在您的示例中,您需要使用以下JSON:
{"method":"HelloService.Say","params":[{"Who":"Test"}], "id":"1"}https://stackoverflow.com/questions/17452199
复制相似问题