5.scala模式匹配及样例类的简单练习--RPC通信
2018-01-08 20:12
381 查看
需求:NodeManager作为客户端,ResourceManager作为服务端,客户端向服务端发送注册信息,服务端处理并返回给客户端成功注册的提示,客户端之后再保持心跳。大致过程如图:
代码部分:
样例类:Message.scala
服务端:MyResourceManager
代码部分:
样例类:Message.scala
package lesson10 //这里为了体现trait的作用,其实样例类底层已经实现了序列化 trait Message extends Serializable //客户端向服务进行注册的消息 case class RegisterMessage(username:String,password:String) extends Message //结果消息 case class ResultMessage(code:Int,content:String) extends Message //客户端向服务端发送心跳消息 case class HeartBeatMessage(id:String,content:String) extends Message客户端:MyNodeManager
package lesson10 import java.io.{ObjectInputStream, ObjectOutputStream} import java.net.Socket /** * 客户端 */ object MyNodeManager { def main(args: Array[String]): Unit = { val socket = new Socket("127.0.0.1",8888) //发送注册消息 (case class Object对象) val oos = new ObjectOutputStream(socket.getOutputStream()) oos.writeObject(RegisterMessage("xiaoma","123")) oos.flush() val ois = new ObjectInputStream(socket.getInputStream) val registerResultMessage = ois.readObject() //打印注册消息 println(registerResultMessage) registerResultMessage match { case ResultMessage(id,content) =>{ oos.writeObject(HeartBeatMessage("hadoop1","alive")) oos.flush() } } val heartBeatMessage=ois.readObject() //打印心跳 println(heartBeatMessage) oos.close() } }
服务端:MyResourceManager
package lesson10 import java.io.{ObjectInputStream, ObjectOutputStream} import java.net.ServerSocket /** * 服务端 */ object MyResourceManager { //处理客户端注册请求 def handlerRegister(username:String,password:String):ResultMessage={ // 如果这儿是spark,那么spark就会把注册过来的信息存到 内存里面 //内存易丢失,他还会把信息存到zookeeper里面 println("成功调用处理注册的方法") ResultMessage(1,"success") } def hendlerHeartBeatMessage(hostname:String,status:String): ResultMessage={ println("成功调用处理心跳的方法") ResultMessage(2,"success") } def main(args: Array[String]): Unit = { //服务端 val serverSocket = new ServerSocket(8888) val accept = serverSocket.accept() val ois = new ObjectInputStream(accept.getInputStream) val oos = new ObjectOutputStream(accept.getOutputStream) while (true){ val clientMsg = ois.readObject() val result = clientMsg match { case RegisterMessage(username, password) => { //做相对应的操作就可以了,并返回处理结果 handlerRegister(username, password) } case HeartBeatMessage(hostname,status) =>{ hendlerHeartBeatMessage(hostname,status) } } oos.writeObject(result) oos.flush() } } }
相关文章推荐
- Scala学习——模式匹配和样例类
- scala-简单的模式匹配
- 快学Scala学习笔记及习题解答(12-14高阶函数、集合、模式匹配和样例类)
- Scala--模式匹配和样例类
- Scala模式匹配-值匹配与简单类型匹配
- Scala 自学笔记 模式匹配和样例类
- 【Scala-模式匹配和样例类】
- 快学Scala习题解答—第十四章 模式匹配和样例类
- Scala 专题教程-Case Class和模式匹配(1):简单的示例
- scala模式匹配与样例类
- scala Case Class和模式匹配(1):简单的示例
- scala 模式匹配详解 1
- Scala 模式匹配的五种情形,值,case class ,optional ,数据类型,集合内数据
- Scala深入浅出进阶经典 第77讲:模式匹配下的提取器动手构造实战
- 练习一:单链表的反转,串的模式匹配
- Scala的模式匹配
- scala 开发入门(8)-- 模式匹配
- scala 模式匹配与case class
- Scala模式匹配
- scala中的正则匹配和模式匹配