Moin zusammen,
ich hoffe jemand kennt das Problem und kann mit helfen:
Ich habe ein ziemliches Problem mit einer SSL-Websocket in Javascript. Und zwar nur mit iOS (Wahrscheinlich auch erst seit iOs 15) Eigentlich läuft die Socket mit unseren Client-Server Kartenspielen seit Jahren ziemlich perfekt. Die Clients sind HTML5, der Server VB.Net.
Das onopen Event wird (vereinfacht) wie folgt behandelt:
Also eingentlich kein Hexenwerk und ziemlich überschaubar.
Das Handshake läuft einwandfrei. Aber von den ca. 100 Zeichen des Logins werden nur die erstn 2 Zeichen (manchmal auch 4 oder 6) gesendet. Ganz selten klappt auch der Login.
Wenn das der Fall ist, läuft auch danch alles ohne irgendwelche Probleme.
Wie gesagt: Nur unter iOS. Unter Windows-Clients und auch unter Android tritt dieses Problem nicht auf. Ich habe schon alles mögliche Versucht. Irgendwelche Terminierungen am Ende des Strings. Kein Erfolg.
Ich habe auch versucht, die Kommunikation nicht mehr über Textframes, sondern über Binary Frames abzuwickeln. Auch ohne Erfolg. Auch da werden nur die erst 2 Byte gesendet.
Das Verrückte ist: Wenn ich das Browserfenster schließe, werden in diesem Moment die restlichen Byte an der Server gesendet, was dann natürlich nix mehr bringt.
Auch der Closeframe wird dann korrekt erzeugt und gesendet.
Ich weiß absolut nicht mehr, wo ich noch hingreifen soll, drehe mit komplett im Kreis und komme keinen mm weiter. Irgendwie scheint der Sendebuffer nicht vernünftig geleert zu werden. So eine Art flush könnte ich mir vorstellen. Aber das unterstützt die Socket ja nicht.
Hat irgend jemand eine Ahnung, woran das liegen könnte?
Für jeden Tipp wäre ich dankbar.
Gruß von der verregneten Nordsee
Joachim
ich hoffe jemand kennt das Problem und kann mit helfen:
Ich habe ein ziemliches Problem mit einer SSL-Websocket in Javascript. Und zwar nur mit iOS (Wahrscheinlich auch erst seit iOs 15) Eigentlich läuft die Socket mit unseren Client-Server Kartenspielen seit Jahren ziemlich perfekt. Die Clients sind HTML5, der Server VB.Net.
Das onopen Event wird (vereinfacht) wie folgt behandelt:
HTML Code:
ws.onopen = function (){ // Some code setInterval(function(){ if(ws.bufferedAmount == 0){ var data=getSendQ(); if (data.length!=0) { data+=DUMMYSENDER; // 3 Spaces as Dummy ws.send(data); } } },OUTQTICK); // 50ms // some code putSendQ(_cmd.REQ_LOGIN + _user.name + TR + _user.passwordEncoded + TR + REMOTEHOST + TR + "87228732" + TR + VV ); // some code };
Das Handshake läuft einwandfrei. Aber von den ca. 100 Zeichen des Logins werden nur die erstn 2 Zeichen (manchmal auch 4 oder 6) gesendet. Ganz selten klappt auch der Login.
Wenn das der Fall ist, läuft auch danch alles ohne irgendwelche Probleme.
Wie gesagt: Nur unter iOS. Unter Windows-Clients und auch unter Android tritt dieses Problem nicht auf. Ich habe schon alles mögliche Versucht. Irgendwelche Terminierungen am Ende des Strings. Kein Erfolg.
Ich habe auch versucht, die Kommunikation nicht mehr über Textframes, sondern über Binary Frames abzuwickeln. Auch ohne Erfolg. Auch da werden nur die erst 2 Byte gesendet.
Das Verrückte ist: Wenn ich das Browserfenster schließe, werden in diesem Moment die restlichen Byte an der Server gesendet, was dann natürlich nix mehr bringt.
Auch der Closeframe wird dann korrekt erzeugt und gesendet.
Ich weiß absolut nicht mehr, wo ich noch hingreifen soll, drehe mit komplett im Kreis und komme keinen mm weiter. Irgendwie scheint der Sendebuffer nicht vernünftig geleert zu werden. So eine Art flush könnte ich mir vorstellen. Aber das unterstützt die Socket ja nicht.
Hat irgend jemand eine Ahnung, woran das liegen könnte?
Für jeden Tipp wäre ich dankbar.
Gruß von der verregneten Nordsee
Joachim
Comment