PC で実行されている Qt/C++ アプリケーションと通信しているモバイル デバイスで実行されている HTML/Javascript に取り組んでいます。モバイル デバイスと PC の両方がローカル ネットワーク上にあります。HTML ページ (クライアント) と C++ アプリ (サーバー) の間の通信は、Websocket を使用して行われます。
HTML ページは C++ アプリケーションのリモート コントロールであるため、モバイル デバイスと PC の間の接続を低遅延にする必要があります。
Apple 以外のデバイスをクライアントとして使用する場合、データは 60 ~ 120 フレーム/秒の速度で送信されますが、これはまったく問題ありません。Apple デバイスを使用する場合、このレートは 3 ~ 4 フレーム/秒に低下します。また、ping時間もチェックしました(コマンドラインからのpingコマンドではなく、Websocketの実装です)。デバイスがデータを送信していない限り、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 側からデータを送信します。