Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java rpc

作者:让固执流亡丶   发布日期:2025-07-22   浏览:82

// Java RPC 示例代码

import java.io.IOException;
import java.io.ObjectInputStream;
import import java.io.ObjectOutputStream;
import java.net.Socket;

// 定义一个简单的接口,用于远程调用
public interface HelloService {
    String sayHello(String name);
}

// 实现该接口
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

// 服务端代码
public class RpcServer {
    private final int port;

    public RpcServer(int port) {
        this.port = port;
    }

    public void start() throws IOException {
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("服务器已启动,等待客户端连接...");
            while (true) {
                Socket socket = serverSocket.accept();
                new Thread(new ServiceTask(socket)).start();
            }
        }
    }

    private static class ServiceTask implements Runnable {
        private final Socket socket;

        public ServiceTask(Socket socket) {
            this.socket = socket;
        }

        @Override
        public void run() {
            try (ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
                 ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream())) {

                // 接收客户端请求的方法名和参数
                String methodName = input.readUTF();
                String argument = input.readUTF();

                // 创建服务实例并调用相应方法
                HelloService service = new HelloServiceImpl();
                String result = service.sayHello(argument);

                // 将结果返回给客户端
                output.writeUTF(result);
                output.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

// 客户端代码
public class RpcClient {
    private final String host;
    private final int port;

    public RpcClient(String host, int port) {
        this.host = host;
        this.port = port;
    }

    public String callSayHello(String name) {
        try (Socket socket = new Socket(host, port);
             ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
             ObjectInputStream input = new ObjectInputStream(socket.getInputStream())) {

            // 发送要调用的方法名和参数
            output.writeUTF("sayHello");
            output.writeUTF(name);
            output.flush();

            // 接收服务端的响应
            return input.readUTF();
        } catch (IOException e) {
            e.printStackTrace();
            return "Error";
        }
    }
}

// 测试代码
public class Main {
    public static void main(String[] args) throws IOException {
        // 启动服务端
        RpcServer server = new RpcServer(8080);
        new Thread(() -> {
            try {
                server.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();

        // 模拟客户端调用
        try {
            Thread.sleep(1000); // 等待服务端启动
            RpcClient client = new RpcClient("localhost", 8080);
            String response = client.callSayHello("World");
            System.out.println("Response from server: " + response);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

解释说明:

  1. 接口定义HelloService 是一个简单的接口,包含一个 sayHello 方法。
  2. 服务实现HelloServiceImpl 类实现了 HelloService 接口。
  3. 服务端RpcServer 类负责监听客户端连接,并在接收到请求时调用相应的服务方法。它使用多线程处理多个客户端请求。
  4. 客户端RpcClient 类负责与服务端建立连接,发送方法调用请求,并接收响应。
  5. 测试代码Main 类中包含了启动服务端和模拟客户端调用的代码。

这个示例展示了如何通过 Java 实现一个简单的 RPC(远程过程调用)系统。

上一篇:java 自定义异常

下一篇:java socket编程

大家都在看

java连接数据库的代码

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java实体类转json字符串

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站