【问题标题】:Apache Thrift Java-Javascript communicationApache Thrift Java-Javascript 通信
【发布时间】:2012-08-02 22:59:01
【问题描述】:

我正在编写一个基于 Apache Thrift 的 Java 服务器,它将接收来自 Javascript 客户端的数据。我已经完成了 Java 服务器,但问题是我可以获得 Javascript 客户端的工作示例(我无法找到一个好的示例)。构建文档中的示例不是很有帮助。我当前的 Javascript 客户端如下:

function testServer() {
    try {
        var transport = new Thrift.Transport("http://127.0.0.1:9090");
        var protocol  = new Thrift.Protocol(transport);
        var client = new JavaEventClient(protocol);

        var alive = client.isServerAlive();
    } catch(e) {
    }
}

testServer();  

但代码不起作用 - 因为 Java 服务器抛出“内存不足”错误。我不知道错误是由于我的客户端代码还是 Apache Thrift。

我做错了什么?

【问题讨论】:

  • 你试过增加JVM内存吗?
  • Thrift in Java 会在虚假输入上恶意抛出 OOM,似乎 JS 客户端在那里发送了一些错误。我想您在服务器端的协议定义有isServerAlive() 方法?
  • 是的,在Java服务器实现中有isServerAlive()的声明。
  • 看来 JS Thrift 库仅限于 JSON 协议,您的服务器是使用JSONProtocol 实现的吗?
  • 否,如何将服务器实现为 JSONProtocol?

标签: javascript java thrift


【解决方案1】:

Out Of Memory 错误发生在您的服务器使用 TBinaryProtocol 但您尝试以其他方式访问它时,例如使用浏览器(使用 HTTP)。 IMO 这是一个错误。应该有一些不错的错误消息。

如何使 Thrift Java 服务器与 Thrift Javascript 客户端一起工作的文件分散在整个源代码中。我在这里把他们一起搞糊涂了:https://github.com/LukeOwncloud/ThriftJavaJavascriptDemo

【讨论】:

    【解决方案2】:

    看起来像是通信中的问题。也许您在服务器和客户端上使用不同的协议或传输。或该协议的实现中的错误。 // 例如,我在 thrift-javascript 序列化中发现了带有 utf8 字符的错误。

    请看https://github.com/imysak/using-thrift(我和我的朋友通过thrift编写了这个简单的Java-Node.js通信示例)。

    我希望你可以使用我们的 JS 实现中的一些东西。

    【讨论】:

      猜你喜欢
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多