首页 > 解决方案 > 如何实现我当前的 Scala 服务器以使用 Akka 并发?

问题描述

我目前有一个 Scala 回显服务器,如何在代码中实现 Akka,以便它可以提供我已经实现的 HTML 文件?

甚至不知道如何开始解决这个问题,我是否必须导入类似 Akka 的东西?或者改变我的依赖?所以我不使用导入 Java 和 Scala 而是将其更改为 Akka 吗?

我的回声服务器

import java.net._
import java.io._
import scala.concurrent.{ExecutionContext, Future}
import scala.util.control.Breaks

object EchoServer {
  def read_and_write(in: BufferedReader, out: BufferedWriter): Unit = {
    out.write(in.readLine())
    out.flush()
    in.close()
    out.close()
  }

  def serve(server: ServerSocket): Unit = {
    val s = server.accept()
    val in = new BufferedReader(new InputStreamReader(s.getInputStream))
    val out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream))

    read_and_write(in, out)

    s.close()
  }

  def getListOfFiles(dir: String): List[File] = {
    val file = new File(dir)
    if (file.exists && file.isDirectory) {
      file.listFiles.filter(_.isFile).toList
    } else {
      List[File]()
    }
  }

  def main(args: Array[String]) {
    val server = new ServerSocket(9999)
    var readString = "C:\\Users\\Desktop\\EchoServer\\src\\main\\htmlFiles"
    println("What file are you looking for with extension?")
    implicit val ec = ExecutionContext.global
      while (true) {
        Future {
        implicit val ec = ExecutionContext.global
        val userInput = scala.io.StdIn.readLine()
        val result = getListOfFiles(readString)
        val loop = new Breaks
        try {
          result.foreach { file =>
            if (file.getName.endsWith(".html") == (userInput.endsWith(".html"))) {
              if (file.getName.equals(userInput)) {
                println(file.getName + " file found")
              }
              else {
                println("file not found")
              }
            }
          }
        }
        catch {
          case e: FileNotFoundException => println("Couldn't find that file.")
        }
        serve(server)
      }
    }
  }
}

我已经实现了期货,甚至不确定它是否正确地提供 HTML 文件。我如何将其更改为 akka 并发?

标签: scalaakkaakka-http

解决方案


推荐阅读