竹笋

注册

 

发新话题 回复该主题

JKAS开发框架技术文档7网络操作RP [复制链接]

1#

JKASRPC

RPC(Remote

ProcedureCallProtocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

一、配置

[RPC]

;是否启用RPC

rpc_enable=1

;RPC服务所在包名

rpc_package=test.z.rpc

;RPC端口

rpc_port=

二、服务命名

服务由接口文件和实现文件构成

命名方式为服务名可自行命名,遵循驼峰命名规则

实现名由服务接口名+Impl方式命名

如:

Hello为服务接口名

HelloImpl为服务实现命名

三、案例

1、服务端

packagetest.z.rpc;

publicinterfaceHello{

StringsayHello(Stringstring);

}

packagetest.z.rpc;

publicclassHelloImplimplementsHello{

publicStringsayHello(Stringstring){

//TODOAuto-generatedmethodstub

return"你好:"+string;

}

}

2、客户端(只支持JAVA)

importjava.io.ObjectInputStream;

importjava.io.ObjectOutputStream;

importjava.lang.reflect.InvocationHandler;

importjava.lang.reflect.Method;

importjava.lang.reflect.Proxy;

importjava.net.InetSocketAddress;

importjava.net.Socket;

importtest.z.rpc.Hello;

publicclassRpcClientTimplementsInvocationHandler{

privateSocketsocket=null;

ObjectOutputStreamoutput=null;

ObjectInputStreaminput=null;

privateClassTserviceInterface;

privateInetSocketAddressaddr;

publicRpcClient(Stringip,Stringport){

this.addr=newInetSocketAddress(ip,Integer.parseInt(port));

}

publicTgetClientIntance(ClassTserviceInterface){

this.serviceInterface=serviceInterface;

return(T)Proxy.newProxyInstance(serviceInterface.getClassLoader(),newClass?[]{serviceInterface},this);

}

publicvoidconn()

{try{

socket=newSocket();

socket.connect(addr);

}

catch(Exceptione)

{

}

}

publicvoidclose()

{try{

if(socket!=null)socket.close();

if(output!=null)output.close();

if(input!=null)input.close();

}

catch(Exceptione)

{

}

}

Override

publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{

try{

conn();

output=newObjectOutputStream(socket.getOutputStream());

output.writeUTF(serviceInterface.getName());

output.writeUTF(method.getName());

output.writeObject(method.getParameterTypes());

output.writeObject(args);

input=newObjectInputStream(socket.getInputStream());

returninput.readObject();

}finally{

close();

}

}

publicstaticvoidmain(String[]args){

RpcClientclient=newRpcClient("localhost","");

Hellohello=(Hello)client.getClientIntance(Hello.class);

System.out.println(hello.sayHello("sockethellorpc"));

}

}

分享 转发
TOP
发新话题 回复该主题