加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 系统 > 正文

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

发布时间:2021-05-29 00:36:09 所属栏目:系统 来源:互联网
导读:副标题#e# 这整个过程可以用一句话概括:机器 A 通过网络与机器B建立连接,A 发送一些参数给 B,B 执行某个过程,并把结果返回给 A。 在写代码之前,先说一个前置背景,假设我们有一个商品类: publicclassProductimplementsSerializable{ privateIntegerid
副标题[/!--empirenews.page--]

这整个过程可以用一句话概括:机器 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(); 

        //调用服务类生成商品 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读