我正在研究在移动设备上运行的 HTML/Javascript,它与在 PC 上运行的 Qt/C++ 应用程序进行通信。移动设备和 PC 都在本地网络上。HTML 页面(客户端)和 C++ 应用程序(服务器)之间的通信是使用 Websockets 完成的。
HTML 页面是 C++ 应用程序的远程控制,因此需要在移动设备和 PC 之间建立低延迟连接。
当使用任何非 Apple 设备作为客户端时,数据以 60 到 120 帧/秒之间的速率发送,这是完全可以接受的。使用 Apple 设备时,此速率降至 3-4 帧/秒。我还检查了 ping 时间(Websocket 实现,而不是命令行中的 ping 命令)。只要设备不传输数据,它们对于 Apple 设备是可以接受的(1-5 毫秒)。每当它传输数据时,这个 ping 时间都会增加到 200 毫秒。
从 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>
使用 dosend() 函数从 Javascript 端发送数据。