Java实现一个简单的RPC框架(三) 带参数的本地调用

来源:互联网 发布:2017淘宝答题答案 编辑:程序博客网 时间:2024/05/29 12:47

参考:

crylearner专栏  一个简单的RPC框架是如何炼成的 :http://blog.csdn.net/crylearner/article/details/46898537


上面我们已经实现了通过我们指定的协议调用本地的其它类的函数来实现自己的功能,接下来我们要实现带参数的RPC调用。

这里我以add(a,b)为例子,为了实现这个功能,我们的请求方多了两个参数a和b,那么我们的RPC协议就要进行相应的修改:前面我们的请求方包含id和commnad,现在我们再增加两个参数arg1和arg2

被调用方除了处理sayHello命令外,新增处理add命令的功能。


Java代码实现:

/** * 带参数的RPC调用 * 新增一个add(a,b)功能 * @author xchen * */public class Test3 {public static void main(String[] args) {mServer server = new mServer();mClient client = new mClient();client.remote=server;System.out.println(client.sayHello());System.out.println(client.add(1, 2));}}class mRequest{int id;String command;int arg1;int arg2;}class mResponse{int id;String result;}class mClient{mServer remote;mRequest req = new mRequest();mResponse rsp = new mResponse();void setReqId(int id){req.id=id;}void setReqCommand(String command){req.command=command;}mClient(){remote = null;}String getRsp(mRequest req){rsp = remote.procRequest(req);return rsp.result;}String sayHello(){req.id=1;req.command="sayHello";return getRsp(req);}String add(int a,int b){req.id=1;req.command="add";req.arg1=a;req.arg2=b;return getRsp(req);}}//class mServer{//Server解析收到的Request报文(报文由id和command组成)//将回复报文id设置为收到的报文一致//如果command为sayHello,那么范围的报文内容为Hello//如果为其他命令,我们暂时没有设定,所有输出无法解析提示消息unknown commandmResponse procRequest(mRequest req){//return "Hello World";mResponse rsp = new mResponse();rsp.id = req.id;if(req.command == "sayHello"){rsp.result = "Hello";}else if(req.command=="add"){rsp.result = Integer.toString(req.arg1+req.arg2);}else{rsp.result = "unknown command";}return rsp;}}//没有实现远程


0 0
原创粉丝点击