2016-03-28 9 views
4

私は、JavaのWebSocketにプレイフレームワーク2.5.Xの公式ドキュメントの指示に従ってていますが、私はこの機能プレイフレームワーク2.5.xのウェブソケットのJava

public static LegacyWebSocket<String> socket() { 
    return WebSocket.withActor(MyWebSocketActor::props); 
} 

と俳優のクラスMyWebSocketActorとコントローラを作成しました:

public class MyWebSocketActor extends UntypedActor { 

    public static Props props(ActorRef out) { 
     return Props.create(MyWebSocketActor.class, out); 
    } 

    private final ActorRef out; 

    public MyWebSocketActor(ActorRef out) { 
     this.out = out; 
    } 

    public void onReceive(Object message) throws Exception { 
     if (message instanceof String) { 
      out.tell("I received your message: " + message, self()); 
     } 
    } 
} 

するとアプリが、私は、WSに接続しようと開始された:// localhostを:9000公式ドキュメントに書かれているとおり

Tip: You can test your WebSocket controller on https://www.websocket.org/echo.html . Just set the location to ws://localhost:9000.

しかし、Webソケットに到達できないようですが、どうすればテストできますか?

おかげ

+0

を取得し続けるか、まったく接続できませんか?あなたの 'routes'ファイルはどのように定義されていますか?ブラウザでデベロッパーコンソールを見たことがありますか?ネットワークタブは何を表していますか?また、websocket.org/echo.htmlのサンプルを使ってテストクライアントを作成することもできます。クロスサーバシナリオを排除するようにしてください。 – Anton

+0

私は全く接続できません。また、私のルートファイルには何もありません。 、私はそれを追加する必要がありますか?コンソールのhttps://www.websocket.org/echo.htmlのws:// localhost:9000に接続しようとすると、次のように表示されます。SecurityError:操作が安全ではありません。ログエリアにセキュアWebSocket(TLS)を使用するチェックボックスをオンにすると、エラーが表示されます。未定義と接続解除。 –

答えて

2

のWebSocket接続を処理するために、また、あなたのroutesファイルにルートを追加する必要があります。

GET /ws controllers.Application.socket()

その後、あなたのWebSocketエンドポイントはws://localhost:9000/wsになります - エコーサービスとテストのためにそれを使用します。

+0

Antonさん、ありがとうございました。あなたの提案に従いましたが、http:// localhost:9000/ws'メッセージ_Upgrade to WebSocket required_。そして私はhttp://websocket.org/echo.htmlからウェブソケットに接続することができません。 Playでwebsocketを作成するのがなぜ難しいのか分かりません。あなたは他の提案がありますか? –

+0

最後に私はそれを解決し、socket()メソッドから静的メソッドを削除し、それにエンドポイントを追加します。ルートファイルでAntonを提案し、SSL/TLSでアプリケーションを起動します。たとえば、activator run -Dhttps.port = 9443 https://websocket.org/echo.htmlのLocationフィールドにwss:// localhost:9443/wsを挿入し、Webソケットに接続します。 –

+0

'wss'はWebSocket Secureプロトコルです。あなたが望んでいなければ、あなたはそれを使う必要はなく、あなたは 'ws'だけを使うことができます。ブラウザで直接WebSocketエンドポイントに接続しようとするため、 'WebSocketにアップグレードする必要があります 'というメッセージが表示されますが、JavaScript(エコーサービスなど)やその他のサービスで作成されたクライアントから行う必要があります。 – Anton

2

最後にアントンの助けを借りて私はそれを解決しました! まず:あなたはSSL/TLSを使用してアプリケーションを起動する必要があります。この時点で、次にソケットのroutesファイルにエンドポイントを追加()メソッド

GET  /ws       controllers.HomeController.socket() 

静的ソケットから()メソッド

public LegacyWebSocket<String> socket() { 
     return WebSocket.withActor(MyWebSocketActor::props); 
    } 

を削除このように、例えば:websocket.org/echo.html

activator run -Dhttps.port=9443 

は、Locationフィールドにwss://localhost:9443/wsを挿入し、それがのWebSocketに接続します!

さらに私はhttps://localhost:9443/wsを訪問する場合、私はあなたが接続してメッセージを送信しないことが可能ですメッセージ

Upgrade to WebSocket required

+1

'static 'の削除に関する情報:これはPlay 2.4、Play 2.5、そして将来のための道です - グローバルな状態を取り除き、依存性注入を使う考え方の一部 – Anton

関連する問題