网站首页 > 文章中心 > 其它

javarpc代码

作者:小编 更新时间:2023-10-17 18:45:55 浏览量:466人看过

java rpc框架哪个好 知乎

Thrift 是由 Facebook 开源的一个 RPC 框架,现在已经挂在 apache.org 下了.主要的几个好处:

① 支持非常多语言,包括在 WEB 开发中很常用的 PHP,以及最重要的 C++/Python/Java 等 WEB后端常用语言,当然,还包括很 cool 的 Ruby、Erlang.

Hessian是一款基于HTTP协议的RPC框架,采用的是二进制RPC协议,非常轻量级 ,且速度较快.

当然,还有Hetty,它是一款构建于Netty和Hessian基础上的高性能的RPC框架.

javarpc代码-图1

jsonrpc java怎么运行

JSON-RPC-Java 由两个对用户可视化的组件构成,它们是JSONRPCBridge和JSONRPCServlet,二者的协调实现了JSON服务器端对请求对象的处理,并响应给用户.

为了导出一个类的所有的静态方法,应该:JSONRPCBridge.registerClass(("myObject", myObject);

如果registerObject和registerClass被多次调用为有相同键值的对象使用,那么其将被最新赋值的对象所更新.

该协议中最重要的一部分还有就是Servlet了,现在就来简单的介绍一下:

在该协议中,JSONRPCServlet充当传送器,处理通过HTTP传输过来的JSON

如何实现一个简单的RPC框

javarpc代码-图2

0,服务接口定义---Echo.java

/*

* 定义了服务器提供的服务类型 */public interface Echo { ? ?public String echo(String string);

}

一种解决方法是:在运行服务的每台机器上都运行一个特殊的守护进程,该守护进程负责跟踪位于该机器中每一项服务所使用的端口;此外,守护进程还监听一个特定的已经端口,Client通过这个端口与守护进程联系,请求得到指定服务的端口.

复杂的RPC实现框架中,比如可以把服务注册到ZooKeeper中,Client也从ZooKeeper中查询服务.参考:一个更复杂的RPC框架实现

System.out.println(echo.echo("hello,hello"));//使用代理对象调用服务器的服务.并将结果输出

二,服务器端分析--实现类:MainServer.java

Server server = new RPC.RPCServer(); ? ? ? ?/*

* server 启动后,需要注册server端能够提供的服务,这样client使用 服务的名字、

* 服务器的IP、以及服务所运行的端口 来调用 server 的服务 ? ? ? ? */

server.register(Echo.class, RemoteEcho.class);//注册服务的名字

server.register(AnOtherEchoService.class, AnOtherEchoServiceImpl.class);

javarpc代码-图3

server.start();//启动server

三,服务器监听Client连接分析----实现类:Listener.java

当server.start()后,它要创建一个Listener对象,这是一个线程类,该线程用来监听Client连接.

public void start() {

System.out.println("启动服务器");

* server 启动时,需要Listener监听是否有client的请求连接

* listener 是一个线程,由它来监听连接 ? ? ? ? ? ? */

listener = new Listener(this); ? ? ? ? ? ?this.isRuning = true;

listener.start();//listener 是一个线程类,start()后会执行线程的run方法

其实,监听连接就是JAVA ServerSocket类和Socket类提供的相关功能而已.

* accept()是一个阻塞方法,server_socket 一直等待client 是否有连接到来 */

Socket client = server_socket.accept();//建立一条TCP连接

四,动态代理对象 生成---RPC.java

* @param Class[]{} 该参数声明了动态生成的代理对象实现了的接口,即 clazz 所代表的接口类型 .

* 这表明了生成的代理对象它是一个它所实现了的接口类型的对象

* 从而就可以用它来调用它所实现的接口中定义的方法

*

* @param handler 生成代理实例对象时需要传递一个handler参数

* 这样当该 代理实例对象调用接口中定义的方法时,将会委托给InvocationHandler 接口中声明的invoke方法

* 此时,InvocationHandler 的invoke 方法将会被自动调用 ? ? ? ? */

T t = (T) Proxy.newProxyInstance(RPC.class.getClassLoader(), new Class[] {clazz}, handler); ? ? ? ?return t;

最重要的是它的 invoke方法(注意与InvocationHandler的invoke()区分).它负责建立连接,打开输入、输出流,向服务器发送字节数据.

六,"服务器存根"---实现类:RPCServer.java

七,"RPC 编码、解码,协议的定义"---Invocation.java? Method.java

八,总结:

当需要添加新的服务时:按以下步骤即可:①定义服务接口及其实现类,如:AnOtherEchoService.java? ②:在MainServer.java中注册新添加的服务.

③:在MainClient.java中编写获得新服务的代理对象的代码,并用该代理对象调用新服务接口中声明的方法.

分析JAVA中几种常用的RPC框架

HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种.其中,POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式.

我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范.规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体.类似于下面形式:

method request-URL version headers entity-body

协议规定,POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式.实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以.

java protobuf 定义rpc服务怎么调用

然后就开始开发了.

步骤:

①用记事本编写一个.proto文件:

}如:编写的是test.proto

package protobuf;

option java_package = "com.sq.protobuf";

option java_outer_classname = "FirstProtobuf";

message testBuf {

将其放在与刚解压的protoc.exe同级目录中.

执行

则可以找到的一个生成的FirstProtobuf.java文件.

Java调用wsdl,怎么实现

java调用wsdl的步骤如下,主要是使用第三方框架:

步骤如下:

import?java.rmi.RemoteException;

import?javax.xml.rpc.ParameterMode;

import?javax.xml.rpc.ServiceException;

import?org.apache.axis.client.Call;

import?org.apache.axis.client.Service;

import?org.apache.axis.encoding.XMLType;

public?class?webServiceTest?{

public?String?invokeRemoteFuc()?{

String?endpoint?=?"";

String?result?=?"no?result!";

Service?service?=?new?Service();

Call?call;

Object[]?object?=?new?Object[1];

object[0]?=?"Dear?I?miss?you";//Object是用来存储方法的参数

try?{

call?=?(Call)?service.createCall();

call.setTargetEndpointAddress(endpoint);//?远程调用路径

call.setOperationName("say");//?调用的方法名

//?设置参数名:

call.addParameter("str1",?//?参数名

XMLType.XSD_STRING,//?参数类型:String

ParameterMode.IN);//?参数模式:'IN'?or?'OUT'

//?设置返回值类型:

call.setReturnType(XMLType.XSD_STRING);//?返回值类型:String??

result?=?(String)?call.invoke(object);//?远程调用

}?catch?(ServiceException?e)?{

e.printStackTrace();

}?catch?(RemoteException?e)?{

return?result;

public?static?void?main(String[]?args)?{

webServiceTest?t?=?new?webServiceTest();

String?result?=?t.invokeRemoteFuc();

System.out.println(result);

以上就是土嘎嘎小编为大家整理的javarpc代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章