在我的MVP应用程序中,我有很多(客户端 - >服务器 - >客户端)使用GWT-RPC进行通信。结构很简单,这是客户电话的一个例子。
testObject.callToServer(example, new AsyncCallback<Void>(){
@Override
public void onFailure(Throwable caught) {
//handle failure
}
@Override
public void onSuccess(Object result)
//handle success
}
});
我的问题是,如果没有来自客户端的初始调用,我将如何仅实现服务器到客户端的通信?我仍然可以使用RPC,如果是这样,我可以以某种方式重用上面的代码示例吗?
更多信息,我正在使用WebSockets维护客户端/服务器之间的开放式通信链接。我试图找出如何通过电线发送更多的字符串。我认识到RPC和Websockets是两种不同的通信,它们在单个通信实例中可能是互斥的。
至于我想发送什么样的数据,现在只是简单的POJO。
感谢。
答案 0 :(得分:2)
与服务器通信的所有方法都只是通过网络传输的字符串&#39; - 与RPC的区别在于它是一个特殊格式的字符串,用于描述正在发送的对象的类型,结构和内容。结构在会话开始之前预定义 - 在服务器的.class文件中,并编译为GWT代码的JS格式。您的应用程序中有一个共享的.gwt.rpc文件,然后描述了每对RPC接口中可以使用哪些类型,这样双方都可以确定他们知道对方知道的内容(具体来说,该文件的客户端名称)在每个请求中,服务器同意使用该文件(如果可以找到),否则抛出两个不同步的错误。
将对象放入其他形式的传输方式(如websockets)需要将对象序列化为该字符串,并在另一侧将其读出。要正确使用RPC并使用它所设计的限制,您必须启动预期的握手,但由于websockets从客户端启动,因此应该很容易完成。
在你的自我回答中,你提到你转而使用AutoBeans,让你只需在接口中定义非常简单的类bean结构,并且能够轻松地将它们映射到JSON字符串并再次返回。我还在WebSockets加RPC的服务器上完成了两个简单的实现,只有一个共享客户端impl:https://github.com/niloc132/webbit-gwt。该项目支持JavaEE websockets或Webbit(使用Netty的websocket库)。它不完整或没有错误,但让你的行为好像任何一方(服务器或客户端)可以自由地调用另一方,使用RPC-able对象调用方法,并提供一些简单的钩子来启动/停止套接字
答案 1 :(得分:0)
我通过GWT的Autobean框架实现了这一目标。