1

这里有两个定义都达到了相同的结果:

  def sendTrigger(teamId:Long, data:String) {
    EngineSync.browserSockets.collect{ case ((i,(u,t)),s) => if(t==teamId) { s.send(data) } }
  }

  def sendTrigger(teamId:Long, data:String) {
    EngineSync.browserSockets.foreach{ case ((i,(u,t)),s) => if(t==teamId) { s.send(data) } }
  }

发生的事情是我正在遍历套接字列表并过滤它们以发送数据。作为 Scala 的新手,我担心它开始扩展时的性能。据我了解foreach,与其他方法相比性能很差,有谁知道是否collect会更好,或者这是否完全是错误的方法?

4

1 回答 1

1

循环通过一个公平大小的集合与执行网络 IO(至少在阻塞时)是完全不同的规模操作,因此我不会担心这个阶段的性能问题。

如果您真的关心大规模扩展时的性能:

  • 使用NIO 进行异步套接字 IO
  • 将套接字访问逻辑封装在一个内部Actor(并且可能Future在客户端中使用 s 来隐藏 Actor)
  • 甚至可以腾出时间使用Akka 的 IO模块
于 2012-09-13T07:18:23.953 回答