2014-10-05 45 views
0

我有一個運行在端口3000上的流星應用程序。
然後我有一個離子應用程序服務於一個簡單的客戶端。
我想查看在離子應用中流星應用中的數據。
我創建了一個服務:Android上的Ionic和WebSocket

(function() { 
angular.module('myApp').factory('myApi', ['$q', '$rootScope', myApi]); 
function myApi($q, $rootScope) { 
    var options = { 
     endpoint: "ws://localhost:3000/websocket", 
     SocketConstructor: WebSocket 
    }; 
    var ddp = new DDP(options); 
    ddp.on("connected", function() { 
     console.log("Connected"); 
     ddp.sub("allHistory"); 
    }); 

    function on(callback) { 
     ddp.on("added", function (data) { 
      console.log("on added", data.fields.value); 
      var item = { value: data.fields.value, date: data.fields.date }; 
      callback(item); 
     }); 
    }; 
    return { 
     on: on, 
    }; 
} 
})(); 

控制器:

angular.module('myApp').controller('MyController', 
function EventController($scope, myApi) { 
    myApi.on(function (data) { 
     $scope.history.push(data); 
    }); 
    $scope.history = []; 
} 
); 

一個觀點:

<div ng-controller="MyController" style="padding-left:20px; padding-right:20px"> 
    <ul class="thumbnails"> 
     <li ng-repeat="item in history"> 
      <div class="row span9"> 
       <span>Date: {{item.date}}</span> 
       <span>Value: {{item.value}}</span> 
      </div> 
     </li> 
    </ul> 
</div> 

一切正常使用Web客戶端:我可以擺脫流星應用程序數據(在運行命令ionic serve的Web客戶機上使用帶有ddp.js實現的DDP協議)。
當我嘗試ionic emulate android時,我無法看到AVD中的數據,並且在LogCat面板中出現'ReferenceError:WebSocket未定義'。
我試圖安裝'cordova plugin add https://github.com/knowledgecode/WebSocket-for-Android.git',但沒有成功。我如何在離子應用中使用websockets和ororid目標?

+0

有一個sockjs實現模擬websocket。我將'sockjs-0.3.4.min.js'添加到了我的腳本中,並且替換爲: var options = {endpoint:「ws:// localhost:3000/websocket」, SocketConstructor:WebSocket }; 用: VAR選項= { 端點: 「HTTP://本地主機/ sockjs」, SocketConstructor:SockJS }; – 2014-10-08 12:29:58

回答

0

好了,所以,我得到它,終於爲我工作,使用SockJS,它需要在服務器端和客戶端同時安裝,並代替使用此代碼:

var options = { 
    endpoint: "ws://localhost:3000/websocket", 
    SocketConstructor: WebSocket 
}; 
var ddp = new DDP(options); 
ddp.on("connected", function() { 
    console.log("Connected"); 
}); 

我用這個代碼:

var options = { 
     endpoint: "https://localhost:3000/echo", // echo is the prefix i set on server-side 
     SocketConstructor: SockJS 
    }; 
    var ddp = new DDP(options); 
    ddp.on("connected", function() { 
     console.log("Connected"); 
    }); 

所以,現在它連接。但我現在得到一個'Access-Control-Allow-Origin'沒有設置的東西,當我將其部署到移動設備,在瀏覽器上它工作得很好,但在Android設備上,它給了我這個錯誤......我無法評論在問題上,沒有足夠的聲譽,所以我很抱歉在回答中提出另一個問題......但是有沒有辦法解決這個「訪問控制...」的問題?

謝謝,我希望我幫助莫名其妙。

+0

也許有點晚了,但你需要看看CORS。如果您發送自定義標頭,則服務器需要明確「允許」這些標頭才能通過請求。您可能在控制檯中看到預檢選項請求,而不是或者在正常的GET請求之前。 – CleoR 2015-05-07 16:42:07

0

在瀏覽器中工作的最可能原因是您的服務器和瀏覽器位於同一主機上。嘗試通過瀏覽器使用來自不同主機的服務。你會得到同樣的錯誤。 你需要允許服務器端的頭部修復'訪問控制...'的東西