Scala 实现一个最简易的分布式框架任务分发。

在这里插入图片描述

知识点概述

  1. 序列化反序列化
  2. Socket 网络通信
  3. Scala 函数式编程
  4. 输入输出流操作

1. Sender (客户端)

object sender {
  def main(args: Array[String]): Unit = {
    val socket = new Socket("localhost", 8848)
    val objectOut = new ObjectOutputStream(socket.getOutputStream)
    val task = new Task()
    def op(x: Int, y:Int) : Int = {
      x + y
    }
    task.setValue1(522)
    task.setValue2(123)
    task.setOp(op)
    //写对象到Socket
    objectOut.writeObject(task)
    // 刷新
    objectOut.flush()
    println("Task 发送到 processor ...")
    //关闭输出流
    socket.shutdownOutput()
    //接收
    val objectInput = new ObjectInputStream(socket.getInputStream())
    val obj = objectInput.readObject()
    val responseTask = obj.asInstanceOf[Task]
    //输出计算结果
    println("sender 收到的结果是:" + responseTask.result)

    //关闭流
    objectInput.close()
    objectOut.close()
    socket.close()
  }
}

2. Processor 服务端

 object processor {
  def main(args: Array[String]): Unit = {
    val serverSocket = new ServerSocket(8848)

    val socket = serverSocket.accept()
    println("processor 收到 Task, 处理 Task ...")
    val objectInput = new ObjectInputStream(socket.getInputStream())
    val obj = objectInput.readObject()
    val task = obj.asInstanceOf[Task]
    println("处理器处理完毕, 计算的结果是: " + task.op(3, 4))
    val res = task.op(3, 4)
    //计算完结果给 task 设置
    task.setResult(res)
    val objectOut = new ObjectOutputStream(socket.getOutputStream)
    //写对象到Socket
    objectOut.writeObject(task)
    // 刷新
    objectOut.flush()
    //关闭 ObjectOutputStream
    objectOut.close()
    socket.close()
  }
}

3. 传输的 Task

class Task extends Serializable {

  var value1: Int = _
  var value2: Int = _
  var result: Int = _
  var op: (Int, Int) => Int = _

  def setValue1(value1: Int) = {
    this.value1 = value1
  }
  def setValue2(value2: Int) = {
    this.value2 = value2
  }
  def setOp(op: (Int, Int) => Int) = {
    this.op = op
  }
  def setResult(result : Int) = {
    this.result = result
  }
}

4.运行结果

Processor

processor 收到 Task, 处理 Task ...
处理器处理完毕, 计算的结果是: 7

Sender

Task 发送到 processor ...
sender 收到的结果是:7
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值