Wenn Sie eine websocket erstellen, müssen Sie in der Regel eine onmessage Callback-Funktion hinzufügen an den Socket, der immer dann aufgerufen wird, wenn der Client Daten vom Server empfängt.
var socket = new WebSocket("ws://example.com:8000/websocketapp.php");
socket.onmessage = function(msg){
alert('The server says: ' + msg);
}
Eine Funktion, die blockiert, bis der Server konzeptionell eine schlechte Idee reagiert, weil es bedeutet, dass die Ausführung des Skripts vom Server, bis die Antwort hereinkam hängen wird. Wenn der Server ausgelastet ist und die Netzwerklatenz ist hoch Dies kann einige Sekunden dauern. Aus diesem Grund ist es besser, mit Callback-Funktionen zu arbeiten (Funktionen, die aufgerufen werden, wenn ein Ereignis eintritt).
Wenn Sie garantieren können, dass Sie nur eine Anfrage zu einem Zeitpunkt an den Server senden, können Sie einfach die socket.onmessage Funktion auf eine Funktion ändern, die die Server-Antwort verarbeitet und wirkt auf sie:
socket.onopen = function() {
socket.send("What's your name?");
socket.onmessage = function(message) {
alert("The server says its name is " + message);
socket.send("What is the answer to life, the universe and everything?");
socket.onmessage = function(msg){
alert("The server says the answer is: " + msg);
}
}
}
(Übrigens: ich habe die Anforderung, bevor sie die Antwort-Handler für eine bessere Lesbarkeit schrieb es wäre besser, es anders zu tun, um:.. stellen sie die Antwort-Handler zuerst und dann die Anfrage senden Dies ist wichtig für den unwahrscheinlichen, aber nicht unmöglich Fall, dass der Server so schnell reagiert, dass der Handler noch nicht eingerichtet wurde).
Aber wenn man mehrere parallele Anfragen haben, und Sie müssen herausfinden, die der Server anfordern bezieht sich auf, werden Sie etwas besser brauchen. Sie könnten zum Beispiel eine On-Message-Funktion haben, die die Nachricht identifiziert und dann jede Nachricht an eine spezialisierte Nachrichten-Handler-Funktion weiterleitet.
Sie können eine synchrone Funktion für etwas asynchrones nicht machen. Beschäftigtes Warten ist yuck, und JavaScript unterstützt es nicht. Warum möchtest du das tun? Schauen Sie sich Versprechungen an. – Bergi
@Bergi eigentlich kannst du. werfen Sie einen Blick auf meine Antwort unten. Erstellen Sie einfach eine einfache Warteschlange, in diesem Beispiel wartet kein Warten :) –
@RonanDejhero: Nein, Ihre Funktion ist nicht synchron. Es verwendet einen asynchronen Callback, wie es jeder Socket-Listener benötigt. – Bergi