11

wss://Play!Framework 2.2 で作成した単純な WebSocket アプリでは使用できません。メッセージをエコーバックします。エンドポイントはこんな感じ

def indexWS2 = WebSocket.using[String] {
  request => {
    println("got connection to indexWS2")

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

    // Log events to the console
    val myIteratee: Iteratee[String, Unit] = Iteratee.foreach[String] {gotString => {
      println("received: " + gotString)

      // send string back
      channel.foreach(_.push("echoing back \"" + gotString + "\""))
    }}

    (myIteratee, outEnumerator)
  }
}

ルートは次のように記述されます

GET     /ws2                        controllers.Application.indexWS2

このようなJSクライアントから接続を作成します

myWebSocket = new WebSocket("ws://localhost:9000/ws2");

すべてが正常に動作します。しかし、TLS を使用するために変更ws://するwss://と失敗し、次の Netty 例外が発生します。

[error] p.nettyException - Exception caught in Netty
java.lang.IllegalArgumentException: empty text

どうすればこれを機能させることができますか?ありがとう。

4

4 に答える 4

7

Play サーバーで https サポートを有効にしてみましたか? wss を使用して http ポートに接続しようとしているようですが、うまくいきません。https を有効にしてから、URL を wss だけでなく https ポートを使用するように変更する必要があります。

SSL をオンにして Play サーバーを起動するには:

activator run -Dhttps.port=9443

に接続しwss://localhost:9443/ws2ます。

于 2014-12-19T00:33:28.957 に答える