Hallo dedlfix,
Abgeshen davon scheint da was generell kaputt zu sein, denn auch auf der Übersichtsseite aktualisiert sich bei mir seit einer Weile nichts mehr von selbst.
Ha! Fehler gefunden. Socket.io hat einen Modus, bei dem es via XHR/Polling einen Handshake macht und dann zum Websocket-Protokoll rüber wechselt. Aber das connect
-Event wird bereits bevor die Websocket-Verbindung steht gefeuert; das führt dazu, dass ich auf der Polling-Verbindung den Login-Handshake gemacht habe. Bei dem Login-Handshake wird dem Socket ein Attribut hinzugefügt, dass ihn als authentifizierten User kennzeichnet, und er tritt den Kanälen bei, denen er beitreten darf (etwa /forums/self
, dort werden Notifications für neue Postings/Threads für das SELF-Forum gepostet). Der Socket hat sich aber, da die Websocket-Verbindung noch nicht bestand, unterschieden von dem Polling-Socket. Das hat dazu geführt, dass der User keine Notifications bekommen hat, da er weder im privaten User-Kanal war noch in den Foren-Kanälen.
Deshalb funktionierte es auch lokal bei mir: da war die Websocket-Verbindung so schnell aufgebaut, dass die Verbindung vor meinem Handshake stattfand. Eine klassische Race Condition.
Ich habe jetzt Longpolling und XHR-Polling komplett abgeschaltet, es werden nur noch Websockets benutzt. Jetzt funktioniert es wieder.
In dem Zusammenhang möchte ich nochmal die Webdeveloper-Tools vom Chrome loben. Die sind total super, ich kann mir sogar die einzelnen Frames anschauen, die über den Websocket laufen. Darauf bin ich erst darauf gekommen, dort fehlten die Login-Requests. Cool!
LG,
CK