1. 流程图
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版本,可以实现简单的远程通信,但是存在以下缺点:- 阻塞通信;
- 对象序列化空间太大;
- 需要记住服务端的具体IP地址;
- …
后面持续更新,主版本优化RPC
4. 代码地址
https://github.com/lidantao/Hand-RPC
版本:tag-1.0