[英]Poor network performance with Websockets running on apple device
我正在研究與PC上運行的Qt / C ++應用程序通信的移動設備上運行的HTML / Javascript。 移動設備和PC都在本地網絡上。 HTML頁面(客戶端)和C ++應用程序(服務器)之間的通信是使用Websockets完成的。
HTML頁面是C ++應用程序的遠程控制,因此需要在移動設備和PC之間建立低延遲的連接。
當使用任何非Apple設備作為客戶端時,數據以60至120幀/秒的速率發送,這完全可以接受。 使用Apple設備時,此速率下降為3-4幀/秒。 我還檢查了ping時間(Websocket實現,而不是命令行中的ping命令)。 只要Apple設備不傳輸數據,它們就可以接受(1-5毫秒)。 無論何時傳輸數據,此ping時間都會增加到200ms。
從Javascript角度看,Apple設備始終像其他任何設備一樣以60幀/秒的一致速率發送數據。 但是,在服務器端, 如果客戶端是Apple設備 ,則僅接收這60幀中的3-4幀。
有誰知道會發生什么?
這是我的Javascript代碼:
<script language="javascript" type="text/javascript">
var wsUri = document.URL.replace("http", "ws");
var output;
var websocket;
function init()
{
output = document.getElementById("output");
wsConnect();
}
function wsConnect()
{
console.log("Trying connection to " + wsUri);
try
{
output = document.getElementById("output");
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt)
{
onOpen(evt)
};
websocket.onclose = function(evt)
{
onClose(evt)
};
websocket.onmessage = function(evt)
{
onMessage(evt)
};
websocket.onerror = function(evt)
{
onError(evt)
};
}
catch (e)
{
console.log("Exception " + e.toString());
}
}
function onOpen(evt)
{
alert("Connected to " + wsUri);
}
function onClose(evt)
{
alert("Disconnected");
}
function onMessage(evt)
{
alert('Received message : ' + evt.data);
}
function onError(evt)
{
alert("Error : " + evt.toString());
}
function doSend(message)
{
websocket.send(message);
}
window.addEventListener("load", init, false);
</script>
數據從Javascript端使用劑量()函數發送。
很少的想法和建議。
bufferedAmount
屬性是否確定WebSocket是否正在緩沖數據。 如果bufferedAmount
屬性通常為零,則數據已傳遞到OS,OS可能會根據OS或套接字配置(例如Nagle)對其進行緩沖。 獲得更多見識的最佳方法是使用AutobahnTestsuite 。 您可以使用該套件測試客戶端和服務器,並找出問題所在。
我創建了QWebSockets ,它是一個基於Qt的websockets實現,並多次使用它來創建服務器。 Apple設備的性能出色。
但是,當涉及到大消息時,Safari似乎存在嚴重問題(請參閱https://github.com/KurtPattyn/QWebSockets/wiki/Performance-Tests )。 也許這就是問題所在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.