手写RPC - 01

1. 流程图

发送资源
获取资源
绑定连接
Provider
ServerSocket
Consumer
Socket

2. 代码

2.1 Provider

public class Provider {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(1234); // 建立通信,端口为1234
        while (true) {
            System.out.println("========等待客户端连接中========");
            System.out.println();
            Socket client = serverSocket.accept(); // 阻塞等待客户端连接
            
            System.out.println("========新的客户端接入========");
            System.out.printf("客户端ip地址为: %s", client.getInetAddress().toString());
            System.out.println();

			// 传送资源
            ObjectOutputStream outputStream = null;
            outputStream = new ObjectOutputStream(client.getOutputStream()); // 获得输入流
            outputStream.writeObject(new User("1", "可乐manman")); // 传送资源
            outputStream.flush(); // 刷到缓存区发送
            
			outputStream.close();            
            System.out.println("========客户端断开连接========");
            System.out.println();
        }
    }
}

2.2 Consumer

public class Consumer {
    public static void main(String[] args) throws Exception{
        Socket socket = new Socket("127.0.0.1", 1234); // 连接服务器
        ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());// 获得输出流

        User user = (User) inputStream.readObject();

        System.out.println(user.toString());

        inputStream.close(); // 关闭通道
        socket.close(); // 关闭socket通道

    }
}

2.3 User

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {

    private String id;
    private String name;

}

3. 总结

当前版本为最简单的RPC版本,可以实现简单的远程通信,但是存在以下缺点:
  1. 阻塞通信;
  2. 对象序列化空间太大;
  3. 需要记住服务端的具体IP地址;

后面持续更新,主版本优化RPC


4. 代码地址

https://github.com/lidantao/Hand-RPC

版本:tag-1.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值