0

テキストベースのプロトコルを使用してサーバーと通信 (全二重) できる GWT (2.4.0) アプリケーションを構築しようとしています。これを実現するために、Kaazing Websocket Gateway Version 3.3.2 をプロキシとして使用しています。

GWT アプリ <-----[websocket]-----> Kaazing <-----[tcp]----->バックエンド サーバー

これは私のKaazing構成です:

<service>
  <accept>ws://127.0.0.1:9444/foobar</accept>
  <connect>tcp://localhost:50189</connect>
  <type>proxy</type>
  <cross-site-constraint>
    <allow-origin>http://127.0.0.1:8888</allow-origin>
  </cross-site-constraint>  
</service>

このセットアップは、Kaazing クライアントの Java 実装で動作します。このサービスを GWT アプリケーションで使用したいと考えています。

これは、GWT クライアント実装のコードです。

    WebSocket ws;
    try {
        ws = new WebSocket("ws://127.0.0.1:9444/foobar");
        ws.addCloseHandler(new CloseHandler() {
            @Override
            public void onClose(CloseEvent ev) {
            }
        });
        ws.addMessageHandler(new MessageHandler() {
            @Override
            public void onMessage(MessageEvent ev) {
                System.out.println(ev.getData());
            }
        });
        ws.addOpenHandler(new OpenHandler() {
            @Override
            public void onOpen(OpenEvent ev) {
            }
        });
    } catch (WebSocketException e) {
        e.printStackTrace();
    }

GWT クライアントはバックエンド サーバーにテキストを正常に送信できます。サーバーからの応答を処理できません。ev.getData()が呼び出されるとすぐに、JavaScript 例外がスローされます。

Uncaught JavaScript exception [Uncaught java.lang.ClassCastException: com.google.gwt.core.client.JavaScriptObject$ cannot be cast to java.lang.String]

上記のコードの WebSocket アドレスをws://127.0.0.1:9444/echoに変更して Kaazing エコー サービスを使用すると、送信したテキストはすべて GWT アプリケーションによって正常に受信されます。サービスをプロキシ(またはブロードキャスト) に戻すと、サーバーからのメッセージを受信するたびに上記の JavaScript 例外がスローされます。

Java プログラムの同じコード (Kaazing Java クライアントを使用) は問題なく動作します。

私は GWT の専門家ではないので、問題をさらにデバッグする方法はありますか、それとも見落としている簡単な解決策はありますか?

4

1 に答える 1

0

以前にその問題を見たことがあると思いますが、gwtclient.gwt.xml ファイルの内容を共有してもよろしいですか? あるいは、GWT クライアントの「gwtclient.gwt.xml」で ByteSocket を使用しているか WebSocket を使用しているかに応じて、「」または「」を追加してみてください。

お役に立てれば、

-マルセロ

于 2012-07-18T02:17:24.483 に答える