Dualrpc学习笔记 一

关于dualrp的介绍,这里得写上:
引用open-open上的一段话:
DualRpc是一个用于开发在客户端与服务器之间实现RPC调用的简洁Java框架。它对于构建胖/瘦客户端与服务器上的商业逻辑交互是一个实用的解决方案。这个框架是双向的-客户端可以调用服务端的方法并且服务器同样可以调用客户端的方法。RPC调用或信息都可以被广播到所有连接着的客户端。由于在客户端与服务器之间始终建立着一个单一,持续的TCP/IP连接,所以对话状态在RPC调用期间将被一直保持着。内置SSL,SSH和HTTP/SOCKS 代理通道使得可在防火墙之内部署应用程序并保证调用的安全。DualRpc能够与Swing,SWT和其它GUI框架结合使用。DualRpc 客户端可以通过手动安装也可利用Java Web Start实现大范围部署。
[url]http://www.open-open.com/open149736.htm[/url]
对于C/S开发很有用的一个组件。学习一下。
Dualrpc控件学习笔记:
一、类的学习:
1、客户端:(com.retrogui.dualrpc.client)
DualRpcClient 构造器DualRpcClient(String host,int port),初使化一个连接器。
AbstractClientRpcHandler 用于对DualRpcClient进行注册,相关于一个监听器。DualRpcClient必须注册了它以后才可以连接。

2、服务器端:(com.retrogui.dualrpc.server)
DualRpcServer 构造器DualRpcClient(String host,int port),开启一个服务器。
AbstractServerRpcHandler 用于对DualRpcServer进行注册,相关于一个监听器。DualRpcServer必须注册了它以后才可以连接。
DualRpcServerDispatcher 用于传递信息的一个dispatcher.

二、使用例子:
1、服务器端:

com.anysky.exam.server.Server.java
private static String host = "localhost";
private static int ip = 4050;
String serverHandlerConfigurationObject = "this object represents external data passed to the server handler";
//开启一个服务器
DualRpcServer server = new DualRpcServer(host, port, serverHandlerConfigurationObject);
try {
//注册服务器的处理器(com.anysky.exam.server.ServerHandler),具体说明见下!
server.registerServerSideHandlerClassname("com.anysky.exam.server.ServerHandler1");
//这里可以对其进行注册多个类
server.registerServerSideHandlerClassname("com.anysky.exam.server.ServerHandler2");
//开启服务器监听,方法是死循环
server.listen();
//下面程序是不会到的了。
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


com.anysky.exam.server.ServerHandler.java

public class ServerHandler extends AbstractServerRpcHandler {
//必须继承此类,并实现此构造器
public ServerHandler(DualRpcServerDispatcher arg0) {
super(arg0);
}

//定义一个可以被客户端访问到的方法
public Object sendToClient() {
UserBean userBean = new UserBean();//必须继承了Serializable的类才可以使用
userBean.setId("12545454");
userBean.setUsername("ServerToClient");
userBean.setPassword("ServerToClient");
return userBean;
}

//这里可以定义任意可以被客户端访问的方法。

//也可以定义访问客户端的相关handler类中的方法,具体如下:
public void getClientMethod(){
String client_handler_class_name="com.anysky.exam.client.ClientHandler";
//parementer是需要对此方法传递的参数。对象类型。
Object obj = this.getDispatcher().call(client_handler_class_name,"clientMethodName",paramenter);

}
}



2、客户端:

com.anysky.exam.client.Client.java
private static String host = "localhost";
private static int ip = 4050;
//创建一个客户端连接
DualRpcClient client = new DualRpcClient(host, ip);
//实例化一个客户端Handler
AbstractClientRpcHandler handler = new ClientHandler();
//将Handler注册到DualRpcClient中去。没有注册,是不能启动的。具体说明见下!
client.registerClientSideHandler(handler);
//开启连接
client.connect();
//开启后,程序还可以继续执行

//调用服务器端的方法:
public UserBean getUserBeanFromServer(){
String serverHandler="com.anysky.exam.server.ServerHandler";
//sendToClient就是在ServerHandler类中定义的一个方法名,如果有参数的话,可以在其后添加参数
//eg:call(serverHandler,"sendToClient",Object obj1,Object obj2);
Object obj = client.call(serverHandler,"sendToClient");
UserBean userBean = null ;
if(obj!=null&&(obj instanceof UserBean)){
userBean = (UserBean)obj;
}
return userBean;
}



com.anysky.exam.client.ClientHandler.java
public class ClientHandler extends AbstractClientRpcHandler {
//定义一个可以被服务器访问到的方法
public UserBean clientMethodName(UserBean userBean){
if(userBean!=null){
return userBean;
}
return null;
}
}



三、常用类,接口介绍
1、com.retrogui.dualrpc.client.IClientCallbackHandler接口
此接口用于在服务器连接时,一方断开,会给另一方一个信息反馈。叫callBack!
使用方法是在ClientHandler中实现它的brokenConnection();方法,然后在DualRpcClient中进行setCallbackHandler()方法注册.就会实时监听服务器的主线程动向。
eg:

Clieng.java
DualRpcClient client = new DualRpcClient(serverHost, serverPort);

// Register one or more client side handler objects
ClientHandler clientSideHandler = new ClientHandler();
client.registerClientSideHandler(clientSideHandler);

//注册CallBack,
client.setCallbackHandler(clientSideHandler);

// Connect to the server.
client.connect();

//获取CliengHandler被同步的一个对象
Object exitMonitor = clientSideHandler.getExitMonitor();
//加同步锁,等待被clientHandler中的terminateClient()方法唤醒
synchronized (exitMonitor) {

// wait until notified by callback handler
exitMonitor.wait();

}



CliengHandler.java
public Object exitMonitor = new Object();

/**
* notify() the wait() object ,so the client will be closed!;
*/
public void terminateClient() {
// release the lock on the client
synchronized (exitMonitor) {
exitMonitor.notify();
}
}
//服务器一关闭,就会自动通知此方法执行
public void brokenConnection() {
this.terminateClient();
}
// getter for the exit monitor
public Object getExitMonitor() {
return exitMonitor;
}


2、com.retrogui.dualrpc.server.IServerCallbackHandler接口
此接口是针对上一接口的对应应用,客户端添加了CallBack()监听,服务器端也要添加监听。
一样是需要在ServerHandler中进行接口实现。实现它的brokenConnection()方法
server端注册callBack()时,是在ServerHandler中注册的:
eg:

public class ServerHandler extends AbstractServerRpcHandler implements
IServerCallbackHandler {
public ServerHandler(DualRpcServerDispatcher dispatcher) {
super(dispatcher);
dispatcher.setCallbackHandler(this);
}
public void brokenConnection() {
serverApplicationThread.setStop(true);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值