2017-06-06 209 views
0

我目前正在使用Cordova創建的移動應用程序。它使用套接字連接到我們的另一個設備與它進行通信。我們目前使用chrome.sockets.tcp和這個plugin在JavaScript中使用WebSocket時出錯

它連接好,但在Android設備上有一個問題斷開連接。這不是一個超時問題,因爲斷開連接可能發生在20到30秒到10到15分鐘之間。它甚至會在我每秒下載2到3次請求的數據時斷開連接。日誌中沒有錯誤和任何內容來表明發生了什麼。看起來,chrome.sockets.tcp沒有太多的連接狀態報告的方式,所以我可以找出爲什麼它丟棄連接。

所以我試圖切換到JavaScript的WebSocket,看看它是否有助於斷開連接問題。或者至少它似乎提供更多的連接狀態信息。但我無法連接。我得到Error during WebSocket handshake: net::ERR_INVALID_HTTP_RESPONSE。這裏是我的代碼:

var socket = new WebSocket("ws://" + IP + ":" + port); 
socket.protocol = "soap"; 

socket.onclose = function(event) { 
    console.log(event); 
}; 
socket.onerror = function(event) { 
    console.log(event); 
}; 
socket.onmessage = function(event) { 
    console.log(event); 
}; 
socket.onopen = function(event) { 
    console.log(event); 
}; 

我做了一些研究,看來我可能得考慮使用socket.protocol = "aProtocol";的協議,但之後我設置了協議,並設置一個斷點socket.protocol仍然是「」連之後致電socket.protocol = "soap";。它也無法使用構造函數來設置協議。

任何人都可以提供一些原因爲什麼chrome.sockets.tcp在Android上有這樣的斷開連接問題,但不是iOS或者爲什麼使用JavaScript的本地WebSocket無法連接的任何原因?任何幫助是極大的讚賞。

回答

0

原來這是因爲我們的socket服務器是一個TCP套接字服務器。 TCP和WebSocket完全不能一起工作,因爲建立連接有完全不同的過程。所以我最終創建了一個TCP套接字Cordova插件。

0

嘗試傳遞子協議在構造函數中:

var socket = new WebSocket("ws://" + SSID + ":" + port, "soap"); 
+0

我也試過。 –