<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RPC on 蛋蛋忧桑</title><link>https://dandansad.com/tags/rpc/</link><description>Recent content in RPC on 蛋蛋忧桑</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 10 Apr 2025 20:24:07 +0800</lastBuildDate><atom:link href="https://dandansad.com/tags/rpc/index.xml" rel="self" type="application/rss+xml"/><item><title>RPC-Exercise</title><link>https://dandansad.com/2025/04/10/rpc-exercise/</link><pubDate>Thu, 10 Apr 2025 20:24:07 +0800</pubDate><guid>https://dandansad.com/2025/04/10/rpc-exercise/</guid><description>&lt;p&gt;一个RPC（Remote Procedure Call）远程过程调用的练习程序。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;\&lt;/span&gt;&lt;span style="color:#f92672"&gt;---&lt;/span&gt;client
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Client.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Connector.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; DynamicProxyFactory.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RemoteCall.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RPCService.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RPCServiceImpl.java
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Server.java
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="remotecalljava"&gt;&lt;a href="#remotecalljava" class="header-anchor"&gt;&lt;/a&gt;RemoteCall.java
&lt;/h2&gt;&lt;p&gt;是一个用于传输的对象。它是RPC（远程过程调用）系统中非常关键的一个组件，负责封装远程方法调用的所有必要信息。&lt;/p&gt;
&lt;h2 id="rpcservicejava"&gt;&lt;a href="#rpcservicejava" class="header-anchor"&gt;&lt;/a&gt;RPCService.java
&lt;/h2&gt;&lt;p&gt;一个接口，定义request方法。&lt;/p&gt;
&lt;h2 id="rpcserviceimpljava"&gt;&lt;a href="#rpcserviceimpljava" class="header-anchor"&gt;&lt;/a&gt;RPCServiceImpl.java
&lt;/h2&gt;&lt;p&gt;RPCService的实现类，实现request方法。&lt;/p&gt;
&lt;h2 id="clientjava"&gt;&lt;a href="#clientjava" class="header-anchor"&gt;&lt;/a&gt;Client.java
&lt;/h2&gt;&lt;p&gt;客户端，调用DynamicProxyFactory.getProxy返回动态代理对象，从而进行远程调用。&lt;/p&gt;
&lt;h2 id="connectorjava"&gt;&lt;a href="#connectorjava" class="header-anchor"&gt;&lt;/a&gt;Connector.java
&lt;/h2&gt;&lt;p&gt;协助客户端与服务器之间通信的通信工具类，主要包括建立网络连接、数据传输、连接管理。&lt;/p&gt;
&lt;h2 id="dynamicproxyfactoryjava"&gt;&lt;a href="#dynamicproxyfactoryjava" class="header-anchor"&gt;&lt;/a&gt;DynamicProxyFactory.java
&lt;/h2&gt;&lt;p&gt;用于创建客户端的动态代理对象。主要功能就是隐藏了网络通信细节，将方法调用转换为网络请求。返回进行远程调用的动态代理。&lt;/p&gt;
&lt;h2 id="serverjava"&gt;&lt;a href="#serverjava" class="header-anchor"&gt;&lt;/a&gt;Server.java
&lt;/h2&gt;&lt;p&gt;服务端，用于接收客户端请求、执行本地服务实现的方法并返回结果。首先监听指定端口，然后注册服务，再启动服务。在服务运行的过程中不断接到连接请求，接到连接请求后便开启新线程处理请求。&lt;/p&gt;
&lt;h2 id="总结"&gt;&lt;a href="#%e6%80%bb%e7%bb%93" class="header-anchor"&gt;&lt;/a&gt;总结
&lt;/h2&gt;&lt;p&gt;实现远程过程调用主要就是使用动态代理对象，让其看起来像切切实实的本地方法，但实际是隐藏了网络通信细节，将方法调用转换为网络请求，从而获取到远程调用的结果。服务端只需要不断地监听端口，处理请求并返回RemoteCall对象即可。&lt;/p&gt;</description></item></channel></rss>