2012-07-12 12 views
0

我正在嘗試構建一個GWT(2.4.0)應用程序,它可以與使用基於文本的協議的服務器進行通信(全雙工)。爲了做到這一點,我使用Kaazing Websocket Gateway版本3.3.2作爲代理。如何使用Kaazing Websockets在GWT App中接收消息<type>代理</type>配置?

GWT應用 < ----- [網頁套接字] ----->的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> 

這個設置的工作原理與Java實現的Kaazing客戶端。現在我想在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] 

如果我更改代碼上面WS WebSocket的地址://127.0.0.1:9444 /回聲使用的Kaazing echo服務,我發送任何文字成功由GWT應用程序接收。如果我將服務更改回代理(或廣播),則每次收到來自服務器的消息時都會拋出上述JavaScript異常。

Java程序中的相同代碼(使用Kaazing java客戶端)工作得很好。

由於我不是GWT專家,有沒有什麼辦法可以進一步調試問題,或者有沒有簡單的解決方案,我只是看不到?

回答

0

我相信我以前見過這個問題,你介意分享一下你的gwtclient.gwt.xml文件內容嗎?或者,也許嘗試添加''或'',具體取決於您是在GWT客戶端的'gwtclient.gwt.xml'中使用ByteSocket還是WebSocket。

希望這有助於

-Marcelo

+0

非常感謝您馬塞洛。你指出了我的正確方向。在從Kaazing Demo中檢查了一些gwtclient.gwt.xml文件後,我發現我缺少對JavaScript文件的引用。 (這就解釋了爲什麼ByazSockets的Kaazing Demo不起作用,因爲他們忘記了將文件包含在gwt.xml中)。缺少的JavaScript文件位於/ lib/client/javascript /下的Kaazing存檔中。在我的gwt.xml文件中包含WebSocket.js後,它工作。謝謝! – captn 2012-07-19 06:47:22

相關問題