参考:
上面我们已经实现了简单的本地功能调用,接下来我们来为调用的双方定一个简单的协议,
例如,这里我的调用方发出的RPC请求:包含一个请求id和一个请求command,如id为1,command为‘sayHello’。
被调用者返回的response对应的是command的操作结果。
Java代码实现:
/**
* 订协议
* 这里RPC请求:包含一个请求id和一个请求命令,如‘sayHello’
* 返回:对应请求command的操作结果
* @author xchen
*
*/
public class Test2 {
public static void main(String[] args) {
mServer server = new mServer();
mClient client = new mClient();
client.remote=server;
System.out.println(client.sayHello());
}
}
class mRequest
{
int id;
String command;
//String getRequest()
//{
//return "id: "+id+ " command: "+command;
//}
}
class mResponse
{
int id;
String result;
//String getResponse()
//{
//return "id: "+id+" result: "+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);
}
}
//
class mServer
{
//Server解析收到的Request报文(报文由id和command组成)
//将回复报文id设置为收到的报文一致
//如果command为sayHello,那么范围的报文内容为Hello
//如果为其他命令,我们暂时没有设定,所有输出无法解析提示消息unknown command
mResponse procRequest(mRequest req)
{
//return "Hello World";
mResponse rsp = new mResponse();
rsp.id = req.id;
if(req.command == "sayHello")
{
rsp.result = "Hello";
}else
{
rsp.result = "unknown command";
}
return rap;
}
}
//没有实现带参数的函数处理
运行一下!
在这个约定的协议下,双方可以解析对方的参数,并月