【问题标题】:How to receive messages in a GWT App using Kaazing Websockets <type>proxy</type> configuration?如何使用 Kaazing Websockets <type>proxy</type> 配置在 GWT 应用程序中接收消息?
【发布时间】:2012-07-18 10:17:24
【问题描述】:

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

GWT 应用程序 Kaazing 后端服务器

这是我的 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 应用程序成功接收.如果我将服务改回 proxy(或 broadcast),则每次收到来自服务器的消息时都会引发上述 JavaScript 异常。

Java 程序中的相同代码(使用 Kaazing Java 客户端)运行良好。

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

【问题讨论】:

    标签: gwt websocket kaazing


    【解决方案1】:

    我相信我以前见过这个问题,您介意分享您的 gwtclient.gwt.xml 文件内容吗?或者,根据您在 GWT 客户端的“gwtclient.gwt.xml”中使用的是 ByteSocket 还是 WebSocket,尝试添加 '' 或 ''。

    希望这会有所帮助,

    -马塞洛

    【讨论】:

    • 非常感谢马塞洛。你给我指出了正确的方向。在检查了 Kaazing Demo 中的一些 gwtclient.gwt.xml 文件后,我发现了对我丢失的 JavaScript 文件的引用。 (这就解释了为什么 ByteSockets 的 Kaazing 演示不起作用,因为他们也忘记了在他们的 gwt.xml 中包含该文件)。缺少的 JavaScript 文件位于 /lib/client/javascript/ 下的 Kaazing 存档中。在我的 gwt.xml 文件中包含 WebSocket.js 后,它起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2014-09-04
    • 2018-03-09
    相关资源
    最近更新 更多