Wie gehe ich mit der Beschränkung der parallelen Anfragen pro Domain durch den Browser um, wenn eine AJAX-Anfrage Priorität hat?

Stellen Sie sich folgende Situation vor:

Es gibt ungefähr 20 Anfragen (oder sogar mehr), die von unserer Website ausgelöst wurden. Dies können beliebige Anfragen sein - wir wissen nicht, wie wir sie erneut auslösen sollen. Auf dieser Website richten sich alle Anfragen an dieselbe URL. Die Anforderungen können abonnierte Ereignis-Listener haben.

Bei Verwendung von Chrome werden die ersten 6 Anforderungen gesendet und die anderen warten in einer Warteschlange auf den Versand (wegen des paralleles Anforderungslimit pro Domain).

In diesem Moment löst die Webseite eine sehr wichtige Anfrage aus (nennen wir sie "VIR"), die eine höhere Priorität als die vorherigen 20 Anfragen hat, um an den Server gesendet zu werden. Die anderen Anfragen (und deren Event-Listener) sind ebenfalls wichtig, sodass wir sie nicht einfach abbrechen können, um die VIR sofort zu senden.

Wir brauchen eine Lösung, um alle ausstehenden Anforderungen zu erhalten (6 gesendet + 14 in der Warteschlange), abzubrechen, dann die VIR zu senden und die anderen erneut zu senden. mit denselben Event-Listenern wie zuvor.

Wenn es keine andere (sofort einsatzbereite) Lösung gibt, lauten die 2 grundlegenden Fragen:

Ist es möglich, auf alle ausstehenden Anforderungen (einschließlich der Warteschlange) zu verweisen?Ist es möglich, eine xhr abzubrechen und dann erneut zu senden (indem Sie sie irgendwie klonen, oder ich weiß es nicht)?

Und eine andere verwandte Frage:

Ich erinnere mich, dass das Limit für parallele Anfragen pro Hostname ein Limit für den Browser und nicht nur für die aktuelle Registerkarte ist. Gibt es eine magische Lösung dafür? Wenn ja, möchte ich das wirklich schreiben? :)

Sei vorsichti davon müssen alle Anfragen an das @ gesendet werdsame domain. (Bedeutet, dass die Ausrichtung auf eine andere Domain mit dem VIR hier keine Option ist.) Die Verwendung von Websocket oder http / 2 könnte jedoch das Grundproblem lösen. Dies sind keine Optionen in dieser aktuellen Frage.

Ich schätze jede Idee dazu! Danke im Voraus!

pm .: Und ja, es ist eine Javascript-Frage:)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage