1

假设我需要在 Scala 中实现一个自定义的面向消息的协议。我还需要实现客户端/服务器代码。

我将为协议消息定义“案例类”,如下所示:

特质讯息
案例类 Request1(...) 扩展消息
案例类 Response1(...) 扩展消息
案例类 Request2(...) 扩展消息
案例类 Response2(...) 扩展消息
... // 其他请求/响应

现在我需要从输入/输出流读取/写入消息并处理消息的函数。

def read(in: InputStream): Message = {...}

def write(msg: Message, out: OutputStream) {...}

def handle(msg:Message): Message = msg match {
  case req: Request1 = ... // 处理 Request1
  case resp: Response1 = ... // 处理 Response1
  ... // 所有其他消息类型的情况
}

我想它有效,但我想知道我是否可以改进解决方案。您将如何纠正或改进它?

4

1 回答 1

2

你看过阿卡吗?

Akk 使开发分布式应用程序变得更加简单,无需手动定义输入和输出流。只需看一下主页上的“远程处理”示例。

这种方法的好处是您可以专注于协议本身,即在您的情况下,在客户端开发一个(或多个)参与者,在服务器端开发一个(或多个)参与者。

Akka 应该为您提供您需要的所有“低级”功能,负责实际发送和接收消息、多线程等;所以你不必重新发明轮子。这也应该使您的代码将来更容易被其他人维护,因为 Akka 是一个众所周知的工具包。

要了解演员如何工作的基本概念,请查看本书章节,但请注意,它描述了 Scala 演员,同时已被 Akka 演员取代。如果你想深入挖掘,我推荐Akka Concurrency,它是最新的。

于 2013-10-26T15:24:30.253 回答