用Scala模拟RPC通信

模拟场景:有两台服务器server和client,模拟server和client间的rpc通信。首先启动server, client上线后向server发送注册信息。如果注册成功,server返回注册成功的信息给client,client每隔3秒开始向server发送“心跳数据”;如果注册失败,server返回注册失败的信息给client。

代码实现:
1.创建样例类Regist、Registed、HeartBeat

package main.scala.rpc

/**
  * 样例类,用来服务端与客户端传递信息
  */
//注册信息
case class Regist(hostname:String,password:String) 
//注册返回信息
case class Registed(registed:Boolean)
//心跳数据
case class HeartBeat(information:String)

2.服务端

package main.scala.rpc

import java.io.{ObjectInputStream, ObjectOutputStream}
import java.net.ServerSocket

/**
  * 服务端
  */
object Server{

  def main(args: Array[String]): Unit = {
    var server = new ServerSocket(9999)
    //监听客户端请求
    val socket = server.accept()
    val in = new ObjectInputStream(socket.getInputStream)
    val out = new ObjectOutputStream(socket.getOutputStream)
    while(true){
      val input = in.readObject()
      //对客户端发来的信息进行模式匹配
      input match{
        case Regist("hadoop","hadoop")=>out.writeObject(Registed(true))//接收到正确注册信息,将注册成功的信息返回客户端
        case x:HeartBeat=>println(x.information)//接收到心跳信息,将心跳信息打印到控制台
        case _=>out.writeObject(Registed(false))//客户端注册失败,将失败信息返回客户端
      }
    }
    server.close()
  }

}

3.客户端

package main.scala.rpc

import java.io.{ObjectInputStream, ObjectOutputStream}
import java.net.Socket

/**
  * 客户端
  */
object Client {

  def main(args: Array[String]): Unit = {
    //创建socket
    val socket = new Socket("127.0.0.1",9999)
    val out = new ObjectOutputStream(socket.getOutputStream)
    val in = new ObjectInputStream(socket.getInputStream)
    //发送注册信息
    out.writeObject(Regist("hadoop","hadoop"))
    //接收服务端信息
    val input = in.readObject()
    //对接收到的信息进行模式匹配
    input match{
      case Registed(true)=>println("登录成功");send(out)
      case Registed(false)=>println("登录失败")
    }
    socket.close()
  }

  /**
    *发送心跳数据,每隔3秒发一次
    */
  def send(out: ObjectOutputStream): Unit ={
    while(true) {
      out.writeObject(HeartBeat("心跳数据"))
      Thread.sleep(3000)
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值