KonfigurationWebsocket blockieren eingehende Anforderung von Server
Ich habe ein Java-Client mit einem Server verbunden WebSockets verwenden. Ich benutze Netty Framework als die Websocket-Implementierung. Der Server sendet einen Ping an den Client, und der Client antwortet mit einem Pong-Frame. Wenn dies nicht geschieht, wird die Verbindung vom Server geschlossen.
Szenario
sendet Mein Client zum Server mehrere Anforderung und erwartet eine Antwort zurück. Wenn nun die Antwort der ersten Anforderung groß ist, werden die nachfolgenden Antworten und der Ping blockiert, bis der Client die erste Anforderung vollständig herunterlädt. Da der Ping ebenfalls blockiert ist, nimmt der Server an, dass die Verbindung unterbrochen ist, und erzwingt ein Schließen des Sockets. Der Client muss dann die Verbindung erneut herstellen und erneut senden, da die Antwort beim letzten Mal nicht abgeschlossen wurde.
Frage
Gibt es eine Möglichkeit, die websocket verhalten sich in einer nicht-blockierenden Art und Weise zu machen, so dass andere Antworten/ping behandelt werden können?
Es klingt wie Ihr Ping-Intervall ist viel zu kurz. Wie viele Nachrichten senden Sie und wie lange dauert es, bis sie gesendet und empfangen werden? Es ist TCP, also werden Daten seriell gesendet. Ein Ping wird nicht wirklich über die Leitung gesendet, bis die großen Daten davor gesendet und bestätigt werden. Wenn das lange dauert, müssen Sie langsamer werden und nicht versuchen, einen Ping sofort zu senden, wenn die vorherigen großen Daten noch gesendet werden. – jfriend00
Es ist derzeit 90 Sekunden. Aber das sollte nicht wichtig sein, denn selbst wenn ich es vergrößere, kann ich nicht kontrollieren, was die Download-Geschwindigkeit eines Clients sein soll, sagen wir mal für ein Bild. Die Bildgröße kann nicht kontrolliert werden. –
Dann kann es ein Problem mit Ihrer webSocket-Bibliothek sein. Es muss nicht versucht werden, den Ping zu senden, bis eine signifikante Zeit vergangen ist, nachdem die vorherige Nachricht gesendet wurde. Was erwarten Sie von uns? Es sollte nicht direkt nach dem Senden einer Nachricht ein Ping gesendet werden.Der Ping sollte NUR nach einer gewissen Inaktivitätszeit nach dem Senden vorheriger Daten ausgehen und diese Zeit muss lang genug sein, damit ein latenter oder langsamer Client antworten kann. So muss ein Ping/Pong-System arbeiten, um effektiv zu sein und keine falschen Positives zu haben. – jfriend00