将 mysql 查询结果推送到客户端 GWT

Posted

技术标签:

【中文标题】将 mysql 查询结果推送到客户端 GWT【英文标题】:Pushing mysql query results to clients GWT 【发布时间】:2012-08-27 14:47:28 【问题描述】:

我正在寻找一种有效的方法来将ResultSet 转换为我可以通过 GWT-RPC 发送的形式,该形式通常可以作为 GWT 服务器-客户端通信的一部分。 使用 JSON 与 RequestFactory 的优缺点是什么? 如果我想如上所述使用它们,有人愿意解释一下吗?

说我想在客户端处理大部分数据库而不仅仅是单个条目可能很重要。我一次谈论数百个条目,所以我基本上认为我需要一种有效传输数据的方法。

一次请求一个条目不会产生很大的开销吗?

如果有类似的教程,将不胜感激。

【问题讨论】:

【参考方案1】:

移动大块数据通常是一个非常糟糕的主意,并且对于客户端-服务器架构来说并不典型。所以我建议重新设计。

GWT-RPC 是面向服务的。所有 RPC 框架都是。主要目的是对方法调用进行序列化/反序列化。换句话说,服务器和客户端通信的是必须明确定义的消息。在 GWT 中,底层传输机制是 JSON,而在 SOAP(例如)中是 XML,但机制是相同的。

RequestFactory 更加以数据为中心。想象一个由带有 URL /getCustomers 的简单 HTTP 请求触发的 servlet。 servlet 只是访问数据库并返回结果。 RequestFactory 非常类似,但提供了额外的功能。例如,RequestFactory 依赖于在服务器上创建实体对象 Customer 和在客户端上创建代理对象 CustomerProxy。该框架处理这些对象之间的数据传输。更具体地说,RequestFactory 可以更新单个属性(即“字段”),因此可以通过仅发送状态差异来提高效率。

一个重要的架构差异是 GWT-RPC 在更多功能级别上运行。 RequestFactory 在数据级别运行。一个典型的实现可能是使用 RequestFactory 设置一个 CRUD 接口。这样的设计使用 GWT-RPC 是非常错误的。

我建议您在做出决定之前多阅读这两个框架。但是, RequestFactory 似乎是您问题的最佳解决方案。

如果您只有一个用例,那么实现您自己的 servlet 可能就可以了。在您的 GWT 代码中使用 RequestBuilder 从 servlet 请求数据。访问数据库,将 ResultSet 转换为 JSON,在客户端将响应转换回 javascriptObject,就完成了。这将为您节省设置 RequestFactory 以及所有实体、代理和定位器的工作。

【讨论】:

【参考方案2】:

如果您的应用程序以数据为中心,并且您应该在服务器端使用 JPA,则 RequestFactory 优于 JSON。 (例如 Hibernate、Spring 等)。更重要的是,这取决于您要传输的数据类型。

我会说一次传输所有数据可能不是一个正确的想法。因为序列化和反序列化需要大量时间。浏览器也可能挂起(根据我的经验)。用户必须等到所有数据都加载完毕。

相反,您可以以块方式将数据传输到客户端,因此当用户编辑第一部分时,第二部分可以在后台加载。

【讨论】:

以上是关于将 mysql 查询结果推送到客户端 GWT的主要内容,如果未能解决你的问题,请参考以下文章

获取 Kue 作业的结果并通过开放连接将其推送到客户端

GWT(客户端)=如何将对象转换为 JSON 并发送到服务器?

使用 GWT RemoteServiceServlet 下载文件

如何在nodeJS的mysql查询中将值推送到数组?

为啥不将数据库查询中的移动结果推送到变量中?

使用 Wt 将图表推送到客户端