首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理JSON- RPC与大猩猩RPC

批处理JSON- RPC与大猩猩RPC
EN

Stack Overflow用户
提问于 2014-08-01 00:32:42
回答 1查看 863关注 0票数 2

好吧,我在服务器上工作。它提供网页服务和其他服务。

代码语言:javascript
复制
package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/rpc"
    "github.com/gorilla/rpc/json"
)

type Service struct {
    Name string
}

type ServiceArgs struct {
    Str string
    Val float64
}

type ServiceReply struct {
    Message string
}

func (e *Service) DoSomething(request *http.Request, args *ServiceArgs, reply *ServiceReply) error {
    fmt.Println("DoSomething called remotely!")
    reply.Message = "OMG. It works."

    return nil
}

func main() {
    rpcHandler := rpc.NewServer()
    rpcHandler.RegisterCodec(json.NewCodec(), "application/json")
    rpcHandler.RegisterService(new(Service), "")
    http.Handle("/rpc", rpcHandler)

    http.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("."))))

    fmt.Println("Listening on port 8080.")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatalln(err)
    }
}

我在服务器端有一个API,我希望普通客户端能够访问这个API。为此,我开始学习更多关于JSON-RPC的知识。这就是我如何从网络浏览器调用Service.DoSomething

代码语言:javascript
复制
var log = document.getElementById("log");
var request = new XMLHttpRequest();

var command = {
    "jsonrpc":"2.0",
    "method":"Service.DoSomething",
    "params":[{
        "Str":"pie",
        "Val":3.14
    }],
    "id":1
};

request.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
        var response = JSON.parse(request.responseText).result;
        log.textContent += response["Message"];
    } else {
        console.log(request.statusText);
    }
};

request.open("POST", "/rpc", true);
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
request.send(JSON.stringify(command));

这个很好用。我看到了“天哪,它起作用了”在我的浏览器中运行那个JavaScript。接下来,我想运行多个方法调用。我发现有一种方法可以向服务器发送“批处理”调用。所以我从JavaScript那里试了这个。

代码语言:javascript
复制
var command = [
    {"jsonrpc":"2.0","method":"Service.DoSomething","params":[{"Str":"pie","Val":3.14}],"id":1},
    {"jsonrpc":"2.0","method":"Service.DoSomething","params":[{"Str":"pie","Val":3.14}],"id":2}
];

request.send(JSON.stringify(command));

然而,这给了我一个400 (Bad Request)。我在哪里搞砸了语法吗?或者这是gorilla/rpc的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-01 04:00:01

根据Gorilla Toolkit JSON-RPC概述

此包遵循JSON-RPC1.0规范:

根据JSON-RPC规范JSON-RPC谷歌小组讨论的说法,'batch‘是一个JSON-RPC2.0特性。

看起来大猩猩JSON不理解批处理查询。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25071128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档