【发布时间】:2011-10-13 16:53:00
【问题描述】:
我有一个带有 GWT 客户端的谷歌应用引擎应用程序。大多数服务器功能都可以像往常一样通过正常的 GWT RPC 调用来访问。我正在用 C++ 编写一个需要与 appengine 应用程序通信的数据挖掘应用程序。问题是,实现的 gwt servlet 太多了,所以重写服务器代码是不可能的。
有什么想法吗?
【问题讨论】:
我有一个带有 GWT 客户端的谷歌应用引擎应用程序。大多数服务器功能都可以像往常一样通过正常的 GWT RPC 调用来访问。我正在用 C++ 编写一个需要与 appengine 应用程序通信的数据挖掘应用程序。问题是,实现的 gwt servlet 太多了,所以重写服务器代码是不可能的。
有什么想法吗?
【问题讨论】:
如果您在客户端上使用 java,则可以使用 GWT SyncProxy。虽然这个库的主要用例是测试远程 gwt rpc 服务,但它可以有效地用于任何目的。当您使用 C++ 开发客户端时,这可能不适合您。
如果您控制 GWT 应用程序(即您可以重新编译它),您可以可能执行以下操作:
将 RPC 相关函数导出到 javascript。这就是使您的 GWT 代码的特定功能可以在主机页面中作为普通的 Javascript 函数调用。教程见this文章
使用 embedded browser engine 之类的 webkit 并在其中加载您的 GWT 模块脚本。
将导出的 GWT 函数调用为普通的 java 函数。
但这可能会证明工作量太大,因此您最好重构 servlet 以公开除 RPC 之外的另一个基于 JSON/XML 的接口。
【讨论】:
已解决,最好的方法是按照 Tahir 的建议。尝试直接从 C++ 连接到 GWT RPC 工作量太大。最简单的方法是将服务器端的瘦包装器编写为普通的 servlet,并使用 C++ 中的 http 和 curl。一个关于对象序列化为 JSON 或 XML 的问题仍然存在。我选择在要序列化的对象字段上编写自定义注释,然后在运行时读取这些注释以序列化它们。