2

WebSocket 接続を閉じるにはどうすればよいですか? ドキュメントの例は、すぐに閉じたい場合に機能します。

しかし、次のような場合はどうでしょうか。将来、何らかの状況が発生したときに接続を閉じたい。たとえば、クライアントから特定のメッセージを受け取ったとき。

def indexWS = WebSocket.using[String] {
    request => {

      var channel: Option[Concurrent.Channel[String]] = None
      var outEnumerator: Enumerator[String] = Concurrent.unicast(c => channel = Some(c))

      val myIteratee: Iteratee[String, Unit] = Iteratee.foreach[String] {gotString => {
        // received a string from the client

        if (gotString == "close_me") {
          // outEnumerator = Enumerator.eof // doesn't work
          // outEnumerator >>> Enumerator.eof // doesn't work
        }

      }}

      (myIteratee, outEnumerator)
    }
  }

ご協力ありがとうございました!

4

1 に答える 1

3

わかった:開いたチャネルを通過する必要がありました

var outEnumerator: Enumerator[String] = Concurrent.unicast(c => channel = Some(c))

コメントアウトされたブロックは次のようになります

if (gotString == "close_me") {
    channel.foreach(_.eofAndEnd())      
}

これにより、列挙子を介して EOF がプッシュされ、接続が閉じられます。

于 2013-10-29T15:59:33.013 に答える