站长网 系统 通过几段 Java 代码带你掌握 RPC

通过几段 Java 代码带你掌握 RPC

副标题#e# 这整个过程可以用一句话概括:机器 A 通过网络与机器B建立连接,A 发送一些参数给 B,B 执行某个过程,并把结果返回给 A。 在写代码之前,先说一个前置背景,假设我们有一个商品类: publicclassProductimplementsSerializable{ privateIntegerid

副标题#e#

这整个过程可以用一句话概括:机器 A 通过网络与机器B建立连接,A 发送一些参数给 B,B 执行某个过程,并把结果返回给 A。

“在写代码之前,先说一个前置背景,假设我们有一个商品类:

public class Product implements Serializable { 

 

    private Integer id; 

    private String name; 

 

    public Product(Integer id, String name) { 

        this.id = id; 

        this.name = name; 

    } 

 

    //toString() 

     

    //get set 方法 

有一个商品服务接口:

public interface IProductService { 

 

    Product getProductById(Integer id); 

服务端有商品服务接口的实现类:

public class ProductServiceImpl implements IProductService { 

    @Override 

    public Product getProductById(Integer id) { 

        //实际上这里应该去查询数据库获得数据,下面简化了 

        return new Product(id, "手机"); 

    } 

下面我们通过客户端发送一个商品 id 到服务端,服务端获得 id 后通过商品服务类获取商品信息,返回给客户端:

public class Client { 

 

    public static void main(String[] args) throws Exception { 

        //建立Socket 

        Socket socket = new Socket("127.0.0.1", 8888); 

        //获取输出流 

        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

        DataOutputStream dos = new DataOutputStream(baos); 

        //把商品Id通过网络传到服务端 

        dos.writeInt(123); 

 

        socket.getOutputStream().write(baos.toByteArray()); 

        socket.getOutputStream().flush(); 

 

        //读取服务端返回的商品信息 

        DataInputStream dis = new DataInputStream(socket.getInputStream()); 

        Integer id = dis.readInt();     //商品id 

        String name = dis.readUTF();    //商品名称 

        Product product = new Product(id, name);//通过服务端返回的商品信息生成商品 

 

        System.out.println(product); 

         

        //关闭流资源为了方便阅读,没有做try-catch处理 

        dos.close(); 

        baos.close(); 

        socket.close(); 

    } 

 

public class Server { 

    private static boolean running = true; 

 

    public static void main(String[] args) throws Exception { 

        //建立服务端Socket 

        ServerSocket ss = new ServerSocket(8888); 

        //不断监听,处理客户端请求 

        while (running) { 

            Socket socket = ss.accept(); 

            process(socket); 

            socket.close(); 

        } 

        ss.close(); 

    } 

 

    private static void process(Socket socket) throws Exception { 

        InputStream is = socket.getInputStream(); 

        OutputStream os = socket.getOutputStream(); 

        DataInputStream dis = new DataInputStream(is); 

        DataOutputStream dos = new DataOutputStream(os); 

 

        //读取客户端发过来的id 

        Integer id = dis.readInt(); 

        //调用服务类生成商品 

#p#副标题#e#

        IProductService service = new ProductServiceImpl(); 

        Product product = service.getProductById(id); 

        //把商品的信息写回给客户端 

        dos.writeInt(id); 

        dos.writeUTF(product.getName()); 

        dos.flush(); 

 

        dos.close(); 

        dis.close(); 

        os.close(); 

        is.close(); 

    } 

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/fuwuqi/xt/2021/0528/7289.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部