我想用PlayN创建一个客户/服务器卡片游戏,例如Hearts.虽然我主要关注的是HTML5输出,但我理想的是,如果我决定将来制作一个Android客户端,我希望能够与输出平台无关.我该如何处理RPC机制?
这些是我想到的选项:
GWT.create(MyService.class)(或至少是它的包装器)生成的GWT Async接口.我不知道这对非HTML版本有多好.我可以直接从客户端Java代码使用GWT-RPC吗?我正在研究GWT和OSGi + PAX-Web问题的解决方案.特别的问题是GWT无法加载序列化策略文件,给出以下错误:
ERROR: The serialization policy file '/ctx/ctx/6ExxxxxxxxxxxxxxxxF.gwt.rpc' was not found; did you forget to include it in this deployment?
问题出在Equinox OSGi和PAX-WEB之间.
为了找到解决方案,我想更好地了解GWT-RPC如何加载序列化策略文件.
(免责声明:我已经在生成的文件中阅读了gwt文档[2].我正在寻找更多低级细节:我的印象是我们所遇到的错误必须处理HttpContext.getResource())
我有时/经常在GWT中获得此异常,但不知道原因:
SEVERE: com.google.gwt.user.client.rpc.StatusCodeException: 0
java.lang.RuntimeException: com.google.gwt.user.client.rpc.StatusCodeException: 0
at Unknown.java_lang_RuntimeException_RuntimeException__Ljava_lang_Throwable_2V(Unknown Source)
at Unknown.de_ctech24_simplynews_web_client_util_SimpleCallback_$onFailure__Lde_ctech24_simplynews_web_client_util_SimpleCallback_2Ljava_lang_Throwable_2V(Unknown Source)
at Unknown.com_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_$onResponseReceived__Lcom_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_2Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_Response_2V(Unknown Source)
at Unknown.com_google_gwt_http_client_Request_$fireOnResponseReceived__Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_RequestCallback_2V(Unknown Source)
at Unknown.com_google_gwt_http_client_RequestBuilder$1_onReadyStateChange__Lcom_google_gwt_xhr_client_XMLHttpRequest_2V(Unknown Source)
at Unknown.<anonymous>(Unknown Source)
at Unknown.com_google_gwt_core_client_impl_Impl_apply__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2(Unknown Source)
Caused by: com.google.gwt.user.client.rpc.StatusCodeException: 0
at Unknown.java_lang_RuntimeException_RuntimeException__Ljava_lang_String_2Ljava_lang_Throwable_2V(Unknown Source)
at Unknown.com_google_gwt_user_client_rpc_StatusCodeException_StatusCodeException__ILjava_lang_String_2V(Unknown Source)
at Unknown.com_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_$onResponseReceived__Lcom_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_2Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_Response_2V(Unknown Source)
at Unknown.com_google_gwt_http_client_Request_$fireOnResponseReceived__Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_RequestCallback_2V(Unknown Source)
at Unknown.com_google_gwt_http_client_RequestBuilder$1_onReadyStateChange__Lcom_google_gwt_xhr_client_XMLHttpRequest_2V(Unknown Source)
at Unknown.<anonymous>(Unknown Source)
at Unknown.com_google_gwt_core_client_impl_Impl_apply__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
花了一些时间谷歌后我发现了这个:http://www.mail-archive.com/google-web-toolkit@googlegroups.com/msg79537.html
有一个有趣的提示:如果您断开WLAN并再次连接,则会出现这种情况 - 然后出现错误.我在我的笔记本上尝试了这个 - 然后发生异常.
另一个问题是有时会出现这种异常(并非总是在同一时间或执行特定操作时 - 所以看似随机),尽管网络连接正常.我不知道为什么会发生这种情况,也不知道处理它的正确方法是什么 - 确保我能抓住并忽略它.但是请求永远不会进入服务器并且不执行操作 - 不是很好的错误处理.
关于这个应用程序的一些数据 - 这可能有助于缩小或希望解决问题: …
有没有一种直接从Java代码调用GWT RPC服务端点的简单方法?我的意思是真正的Java代码,而不是编译成javascript的Java代码.
我问,因为我们想对GWT RPC接口运行性能基准测试/压力测试.我想用Java编写测试工具并在JVM中运行它(而不是在浏览器中运行javascript).
我认为必须有一种方法可以做到这一点,因为我认为GWT托管模式需要这样的功能.但是,我无法在GWT运行时中找到任何演示如何干净地执行此操作的代码.我查看了com.google.gwt.user.client.rpc包,但其中的内容似乎使用了JSNI,纯Java显然无法使用.
我正在评估使用GWT-RPC和HTTP Call进行的调用之间是否存在性能差异.
我的appln服务作为Java servlet托管,我目前正在使用HTTPProxy连接从它们获取数据.我希望将它们转换为GWT-RPC调用,如果这会带来性能提升.
我想知道每个人的利弊...
还有关于衡量异步调用性能的工具的任何建议......
[ 关于可以与GWT一起使用的各种服务器通信策略的好文章.]
我发现在我的应用程序中由GWT生成的超过60%的javaScript代码用于RPC序列化程序.另外我发现服务接口之间没有共享序列化器,我的意思是如果我在2个rpc服务接口上引用了例如AccountDTO类型,我会得到2个序列化器类而不是相同类型的1.为了减少编译代码的大小,我想也许我可以使用Deferred Binding来替换我拥有的一个大接口的所有服务接口.如果可能,那么GWTCompiler可能只生成一个AccountDTO序列化器而不是2.
我不确定这是一个好主意,还是我的问题有更好的解决方案.
我试图实现的是这样的:
// Define new interface that extends all service interfaces
public interface GenericService extends RemoteService,
AccountingService,
FinancialService,..., { }
public interface GenericServiceAsync extends AccountingServiceAsync,
FinancialServiceAsync, ..., { }
// At Application.gwt.xml do:
<module>
...
...
<replace-with class="com.arballon.gwt.core.client.GenericService">
<when-this-is class="com.arballon.gwt.core.client.AccountingService>
</replace-with>
<replace-with class="com.arballon.gwt.core.client.GenericService">
<when-this-is class="com.arballon.gwt.core.client.FinancialService>
</replace-with>
...
...
Run Code Online (Sandbox Code Playgroud)
但此刻我收到了错误:
[错误]'文件中的错误:/ C:/Users/Daniel/EclipseWorkspace/ADK/src/com/arballon/gwt/core/client/FinancialService.java'[ERROR]第31行:重新绑定结果'com.arballon.gwt无法找到.core.client.GenericService'
任何有关该问题的想法将不胜感激.问候
丹尼尔
哪些是在GWT中从服务器向客户端发送大量数据的最佳实践?
目前我们正面临GWT 2.3.0中的性能问题.
我们的服务器端向客户端发送巨大的xml(大小以MB/GB为单位),我们的客户端解析xml并使用解析的数据,形成bean列表以在Celltable网格中填充数据.
我们在CellTable网格中填写1k +/10k +记录.
在处理如此庞大的数据时,是否有任何有效的方法/最佳实践?如果我们在服务器端解析数据并在服务器端形成bean,这是好的吗?或任何替代方式..
任何有关此事的帮助或指导将不胜感激.
我正在Glassfish 3.0.1上部署GWT 2.4应用程序.我可以通过http:// host:PORT/appContext / 轻松访问我的应用程序
但是,当我使用Apache反向代理应用程序时,我会得到以下摘录的异常(来自Glassfish日志):
调度传入RPC调用时发生异常com.google.gwt.user.client.rpc.SerializationException:类型"com.ozdokmeci.basicgwtproject.shared.GroupData"无法分配给"com.google.gwt.user.client.rpc.IsSerializable '并且没有自定义字段序列化程序.出于安全考虑,此类型不会被序列化.
实施IsSerializable解决了Chi在相关问题中所建议的问题.相关问题中还有其他解决方法.
我的问题是这个的根本原因是什么,以及两个看似无关的解决方案(实现标记接口和扩展servlet类)如何解决这个问题?相关问题中提到的两种方法都有任何缺点吗?
注意:如果直接联系应用程序,则不会发生异常.
注2:与异常相关的类已经实现了Serializable接口,就GWT而言,它应该等同于IsSerializable.
我必须将文件及其属性发送到GWT服务器.
用于发送文件我使用表单面板.
public class BrowseFile extends DialogBox {
// more code
// ..
private FormPanel getFormPanel() {
if (formPanel == null) {
formPanel = new FormPanel();
formPanel.setMethod(FormPanel.METHOD_POST);
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setAction(GWT.getHostPageBaseURL() +"UploadFileServlet");
formPanel.addSubmitHandler(new FormPanel.SubmitHandler(){
public void onSubmit(SubmitEvent event) {
// TODO Auto-generated method stub
setFilename(fileUpload.getFilename());
}
});
}
return formPanel;
}
}
Run Code Online (Sandbox Code Playgroud)
该文件的所有属性都在Hashmap中

有2个对话框Propertybox extends DialogBox和
BrowseFile extends DialogBox
Run Code Online (Sandbox Code Playgroud)
在PropertyBox的构造函数中有BrowseFile
当PropertyBox构造函数
setSize("600px", "670px");
setHTML("Add Document");
setWidget(getVerticalPanel());
browseFile = new BrowseFile();
Run Code Online (Sandbox Code Playgroud)
PropertyBox内的自定义属性取决于所选的类(Class是树Widget)
在服务器端
public class FileUpload extends HttpServlet implements Servlet{
private …Run Code Online (Sandbox Code Playgroud) 与AJAX调用相比,GWT(Google Web Toolkit)的RPC(远程过程调用)对于从浏览器/ javascript到服务器的异步操作是如何不同或相似的?
如果他们不同,有人可以帮我理解他们的不同之处吗?
我还听说这个RPC实现不适用于所有Server容器.例如,GWT项目在Apache Tomcat中不起作用.
此外,这个RPC是Google的自定义实现,还是标准实现?
gwt-rpc ×10
gwt ×9
java ×3
ajax ×1
asynchronous ×1
cloudflare ×1
gwt2 ×1
gxt ×1
javabeans ×1
json ×1
playn ×1
rpc ×1
servlets ×1
web ×1
websphere-7 ×1