首页 > 其他分享 >230102_50_RPC底层原理

230102_50_RPC底层原理

时间:2023-01-02 23:00:12浏览次数:35  
标签:java 230102 50 RPC dos User io new import

package com.bill.rpc01;

import com.bill.rpc.common.User;

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

/**
 * @Auther: wangchunwen
 * @Date: 2023/1/2 - 01 - 02 - 22:31
 * @Description: com.bill.rpc01
 * @version: 1.0
 */
public class Client {
    public static void main(String[] args) throws IOException {
        // 写出去
        Socket s = new Socket("127.0.0.1",8888);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        dos.writeInt(123);

        s.getOutputStream().write(baos.toByteArray());
        s.getOutputStream().flush();

        // 读进来
        DataInputStream dis = new DataInputStream(s.getInputStream());
        int id = dis.readInt();
        String name = dis.readUTF();
        User user = new User(id,name);

        System.out.println(user);

        dos.close();
        s.close();
    }
}

将网络通信的工作抽离出来,单独抽象为一个类,这个类的作用就是相当于1个网络通信的一个代理,屏蔽了一些网络通信实现的相关的细节。

package com.bill.rpc02;

import com.bill.rpc.common.User;

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

/**
 * @Auther: wangchunwen
 * @Date: 2023/1/2 - 01 - 02 - 22:42
 * @Description: com.bill.rpc02
 * @version: 1.0
 */
public class Stub {
    public User findUser(Integer id) throws IOException {
        Socket s = new Socket("127.0.0.1",8888);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        dos.writeInt(123);
        
        s.getOutputStream().write(baos.toByteArray());
        s.getOutputStream().flush();

        DataInputStream dis = new DataInputStream(s.getInputStream());
        int receivedId = dis.readInt();
        String name = dis.readUTF();
        User user = new User(receivedId,name);
        
        dos.close();
        dos.close();
        
        return user;
        
    }
}

标签:java,230102,50,RPC,dos,User,io,new,import
From: https://www.cnblogs.com/wcwblog/p/17020792.html

相关文章

  • 50.Oracle的索引
    Oracle的索引主要有三种索引:B树索引(B-Treeindex)位图索引(Bitmapindex)全文索引(Textindex)1.B树索引:Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索......
  • 暑假在富士康打工 50 天后,我决定奋发图强
    的小伙伴们大家好,我是二哥呀。相信很多小伙伴都有暑期打工的经历,今天就来给大家分享一个二哥编程星球里一个球友在富士康打工50天的感受,相信大家看完后会深深触动的。坦......
  • Windows 恶意软件数量是 Mac 的 5000 倍,是 Linux 的 36 倍
    AV-TEST是一个独立的测试机构,他们会根据各种标准对操作系统的防病毒和安全软件进行评估和评级,并将测试结果免费提供给用户,帮助用户选择最适合自己的产品。近日,AV-TEST联......
  • 50matplotlib
    importmatplotlib.pyplotasplt#plt.plot([1,2,3,4,5],[3,1,5,6,9],'ro')#plt.show()#x=range(1,15)#y=range(1,42,3)#plt.plot(x,y,color='y')#......
  • Windows 恶意软件数量是 Mac 的 5000 倍,是 Linux 的 36 倍
    Windows恶意软件数量是Mac的5000倍,是Linux的36倍来源:OSCHINA编辑: Alias_Travis2023-01-0108:42:00 3AV-TEST是一个独立的测试机构,他们会根......
  • 解读Datasheet系列:M95080W(ST,SPI EEPROM)
    本文只对M95080W数据手册的一部分进行解读,其涵盖的内容基本足够开发标准SPI接口的EEPROM驱动。​M95160-x和M95080-x是电可擦除非易失性存储器(EEPROM)设备,通过高速......
  • GIT推送错误error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CAN
    报错如下:Countingobjects:100%(25515/25515),done.Deltacompressionusingupto4threadsCompressingobjects:100%(18794/18794),done.error:RPCfailed;......
  • 力扣150 逆波兰表达式求值
    题目:给你一个字符串数组tokens,表示一个根据 逆波兰表示法表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意:有效的算符为'+'、'-'、'*......
  • 230101_50_RPC底层原理
    1.RPC代码参考学习:https://www.bilibili.com/video/BV17Z4y1s7cG?p=1&vd_source=e4f205f9f8b63c316aab97e0421a77a91.1RPC,remoteprocedurecall,远程过程调用,它本身是一......
  • 2023一个小目标:每天写50行代码
    写在前面:今天是2023年1月1日,现在时间18:16,苦于自己写代码的水平有限,之前一直在学习,但效果甚微,后来反思一下,大概原因有两个,第一,没有持续学习,间断的学习,效果不好,有时候......