如何使用Kaazing Websockets <type> proxy </type>配置在GWT App中接收消息?

时间:2012-07-12 10:32:50

标签: gwt websocket kaazing

我正在尝试构建一个GWT(2.4.0)应用程序,它可以使用基于文本的协议与服务器进行通信(全双工)。为了实现这一点,我使用Kaazing Websocket Gateway Version 3.3.2作为代理。

GWT App &lt; ----- [websocket] -----&gt; Kaazing &lt; ----- [tcp] -----&gt; 后端服务器

这是我的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 echo服务,我发送的任何文本都会被GWT应用程序成功接收。如果我将服务更改回代理(或广播),则每次收到来自服务器的消息时都会抛出上述JavaScript异常。

Java程序中的相同代码(使用Kaazing java客户端)工作正常。

由于我不是GWT专家,我有什么方法可以进一步调试问题,还是有一个简单的解决方案,我只是看不到?

1 个答案:

答案 0 :(得分:0)

我相信我以前见过这个问题,你介意分享你的gwtclient.gwt.xml文件内容吗?或者,也许,尝试添加''或''取决于您是否在GWT客户端的'gwtclient.gwt.xml'中使用ByteSocket或WebSocket。

希望这有帮助,

-Marcelo