2017-07-01 11 views
3

私はJettyを使用してWebsocketサーバーを作成しています。jetty websocket server:アプリケーションロジックに基づいて顧客ステータスコードを送信

私のハンドラのコード:

public class WebSocketServerHandler { 

    @OnWebSocketClose 
    public void onClose(int statusCode, String reason) { 
     System.out.println("Close: statusCode=" + statusCode + ", reason=" + reason); 

    } 

    @OnWebSocketError 
    public void onError(Throwable t) { 
    } 

    @OnWebSocketConnect 
    public void onConnect(Session session) { 

    } 

    @OnWebSocketMessage 
    public void onMessage(Session session, String message) { 
    } 

    @OnWebSocketMessage 
    public void onBinaryMethod(Session session, byte data[], int offset, int length) { 

    } 
} 

私の要件の一つは、onBinaryMethod
例えばinsdeビジネスロジックに基づいてカスタムのステータスコードを送信することである:(桟橋はすでにこれをサポート)、タイムアウトのステータスコードとして1001を送信

これらのステータスコードを設定する場所はわかりません。私は次のように試みましたが、うまくいかないようです。

Session().getUpgradeResponse().setStatusCode(); 
+0

何についてどのステータスコードを求めていますか? HTTPレスポンスステータスコード(3桁)とWebSocketクローズステータスコード(4桁)が混乱しているようです。 –

答えて

3

ここでWebSocketを

はのWebSocketのステータスコードについてRFCです。

socketとの通信中このような情報をステータスコードで送信することは想定されていません。代わりに、クライアントが必要とする情報をmessageに送信してください。

あなたはクロージング・コードに興味があることが起こる場合は、次のようあなたがSessionオブジェクトにこの情報を提供することができます

session.close(new CloseReason(YOUR_NUMBER, "Your reason")); 

REST

あなたが使用してこれらのコードに依存している場合RESTサービス、そこには多くのオプションがあります:

  • 私はあなたの目標を達成するための最も簡単な方法は、setStatus(int)を使用することだと思い文脈に

を注入する特定の例外

  • 使用応答ビルダーを投げて
  • 応答を返す:

    @Context 
    HttpServletResponse response; 
    
    @Path("/method") 
    public void onBinaryMethod() { 
        int statusCode = 200; 
        //SOME CODE 
        response.setStatus(statusCode); 
    } 
    

    多くの可能な解決策を列挙した素敵な答えです:

    https://stackoverflow.com/a/22869076/4823977

  • +1

    私はOPがHTTPステータスコードではなくWebSocketクローズステータスコードについて質問していると思います。 –

    +0

    私は答えを更新しました。その場合、私は珍しいです。 – Mark

    関連する問題