2017-06-21 316 views
1

當前我正在開發一個web應用程序,它將在tizen設備(Samsung Gear S3)上運行。該應用程序的目的是在刷卡時向websocketserver發送消息(用Python編寫並運行在我的計算機上)。當我向右滑動時,發送一個字符串1,當我向左滑動時,發送字符串2。 問題在於消息到達服務器需要一段時間(大約5秒)。這種延遲只會在我運行一段時間後第一次運行時發生。據我可以觀察到它的10秒。這意味着我可以在最後10秒內發送任何消息immidiataly。但是當我停頓超過10秒時,會有5秒的延遲。Websocket延遲發送消息

所以問題是什麼原因延遲?或者我該如何避免這種情況。似乎有超時,但我該如何避免這種情況?

客戶端(Tizen SmartWatch)上的代碼是用Javascript和jquery編寫的。

這是客戶端代碼我短了一點。 HTML部分不包括在內。

<script> 

var webSocketURL1 = "ws://"; 
var webSocketURL2 = "Computer10"; 
var webSocketURL3 = ":9998/echo"; 

function WS(String){ 

     var webSocketURL=webSocketURL1+webSocketURL2+webSocketURL3; 
     var webSocket = new WebSocket(webSocketURL); 
     webSocket.onopen = function (e) { 
     console.log('connection open, readyState : ' + e.target.readyState); 
     webSocket.send(String); 
    }; 

    function closeConnection() { 
      if (webSocket.readyState === 1) { 
       webSocket.close(); 
      } 
     }; 
} 
</script> 

<script> 
$(document).ready(function(){ 
    $("body").on("swiperight",function(){  
     WS("string1"); 
    });      
}); 
</script> 

<script> 
$(document).ready(function(){ 
    $("body").on("swipeleft",function(){  
     WS("string2"); 
    });      
}); 
</script> 

回答

0

這裏我改變了一部分代碼。請測試它,並讓我知道是否有任何問題發現

<script> 
    var webSocketURL = 'ws://Computer10:9998/echo'; 
    var ws; 

    function connect() { 
     //alert('connect'); 
     ws = new WebSocket(webSocketURL, []); 
     // Set the function to be called when a message is received. 
     ws.onmessage = handleMessageReceived; 
     // Set the function to be called when we have connected to the server. 
     ws.onopen = handleConnected; 
     // Set the function to be called when an error occurs. 
     ws.onerror = handleError; 

    } 

    function handleMessageReceived(data) { 
     // Simply call logMessage(), passing the received data. 
     logMessage(data.data); 
    } 

    function handleConnected(data) { 
     // Create a log message which explains what has happened and includes 
     // the url we have connected too. 
     var logMsg = 'Connected to server: ' + data.target.url; 
     // Add the message to the log. 
     logMessage(logMsg) 
    } 

    function handleError(err) { 
     // Print the error to the console so we can debug it. 
     console.log("Error: ", err); 
    } 

    function logMessage(msg) { 
     // $apply() ensures that the elements on the page are updated 
     // with the new message. 
     $scope.$apply(function() { 
      //Append out new message to our message log. The \n means new line. 
      $scope.messageLog = $scope.messageLog + msg + "\n"; 
     }); 

    } 

    $(document).ready(function(){ 
     $("body").on("swiperight",function(){  
      ws.send("string1"); 
     });      
    }); 

    $(document).ready(function(){ 
     $("body").on("swipeleft",function(){  
      ws.send("string2"); 
     });      
    }); 

    connect(); 
</script> 
1

我會建議保持全局聲明var'webSocket',而不是在函數範圍內。

再次檢查你的python代碼,你是否使任何不必要/可選的套接字關閉?試着擺脫他們。

+0

謝謝你這部分解決了問題。現在我可以在第一時間立即發送我的消息。但是,如果我不發送任何消息約10秒鐘,然後重新開始發送消息,則需要5秒鐘才能發送消息。我只是好奇爲什麼需要這麼長時間。 – Pluxyy

+0

編輯@ Pluxyy –