【问题标题】:Data transport optimization with Google cloud endpoints使用 Google 云端点优化数据传输
【发布时间】:2015-02-04 13:42:16
【问题描述】:

我通过谷歌云端点从谷歌应用引擎(java)发送List<Item>到javascript。

Item:

public class Item implements Serializable { 

    private String item1;   
    private Integer item2;
    private String item3;   
    //(...) item (4-39)
    private String item40;  

   //Constructor, Getters, setters, +functions

}

在 javascript 中,我正在接收每个项目的以下结构的数据:

{item1:"v1",item2:"v2"}

此外,在每个对象的末尾,我都会收到很多我不明白为什么要发送的数据。

“?”数据不是我定义的函数。我认为是Serializable对象函数,但不明白为什么要发送。

我需要以这种格式发送数据:{"v1","v2"} 而不是{item1:"v1",item2:"v2", a lot of functions} 以减少数据大小。

我想解决java的List<String>发送数据的问题。

但它有点复杂和“丑陋”,因为例如 Item 对象的某些属性是结构化对象。

谷歌云端点中是否有描述以这种方式发送数据的方法?

有没有办法设置端点只发送“必要”的数据?

【问题讨论】:

  • {"v1","v2"} 不是有效的 JSON。所以这是不可能的。我不清楚你认为什么是不必要的。函数实际上并不是从 API 服务器发送的,它们是在解析 JSON 字符串时创建的。
  • 我想发送没有属性名称的数据以不花费太多带宽。我发送了超过 5000 个对象,每个对象有 40 个属性。

标签: java javascript google-app-engine serialization google-cloud-endpoints


【解决方案1】:

让我先说一下,我认为这不是一个好主意,但是您可以使用转换器来控制对象的序列化方式。但是,如果您使用生成的客户端库,您将丢失所有信息——它们只会将事物视为字符串列表。端点应该会自动为您压缩东西,这应该有助于节省大量带宽。您应该进行测量比较两个完整的 5000 列表,并查看究竟节省了多少带宽。请记住,端点也不会传输空属性,因此如果许多属性未全部设置,您会自动节省带宽。

有关如何使用变压器的详细信息,请参阅this page。基本上,您需要一个带有相关注释的class ItemTransformer implements Transformer<Item, List<String>>

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    相关资源
    最近更新 更多