[英]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.