Ich versuche, die Liste der Räume zu finden, in denen sich ein Client gerade befindet, um das Ereignis zu trennen (schließt die Browser / Neuladen der Seite / Internetverbindung wurde gelöscht).
Ich brauche es aus dem folgenden Grund: Der Benutzer hat einige Räume betreten. Dann haben andere Leute das Gleiche getan. Dann schließt er einen Browser Tab. Und ich möchte alle Leute in den Räumen, in denen er ist, benachrichtigen, dass er gegangen ist.
Ich muss also etwas innerhalb des 'disconnect' Ereignisses tun.
%Vor%Ich habe bereits zwei Ansätze ausprobiert und festgestellt, dass beide falsch liegen:
1) durch adapter.rooms
iterieren.
Das ist falsch, weil Adapterräume alle Räume haben. Nicht nur die Zimmer, in denen mein Kunde ist.
2) Durch client.rooms
gehen. Dies gibt eine korrekte Liste von Räumen zurück, in denen sich der Client befindet, aber keine Verbindung zum Ereignis disconnect. Beim Trennen ist diese Liste bereits leer []
.
Wie kann ich das machen? Ich verwende zum Zeitpunkt des Schreibens das neueste socket.io: 1.1.0
Dies ist standardmäßig nicht möglich. Sehen Sie sich den Quellcode von socket.io an.
Dort haben Sie die Methode Socket.prototype.onclose
, die vor dem socket.on('disconnect',..)
Callback ausgeführt wird. Also sind alle Räume davor.
Eine Lösung könnte sein, entweder den Bibliothekscode socket.js zu hacken oder diese Methode zu überschreiben und dann die ursprüngliche aufzurufen. Ich habe es ziemlich schnell getestet, es scheint zu funktionieren:
%Vor%Ich weiß, es ist eine alte Frage, aber in der aktuellen Version von socket.io gibt es ein Ereignis, das vor der Trennung ausgeführt wird. Sie können auf die Liste der Räume zugreifen, denen er beigetreten ist.
%Vor%Tags und Links node.js socket.io socket.io-1.0