16.032015

Websocket Magic

Falls ihr eine Anwendung schreibt welche für die Verbindung zum Server auf Websockets verwendet werdet ihr schnell das Haare raufen beginnen. Es gibt verschiedene Version des Standards, Dummy Websocket Objekte die gar nichts machen (interner Andorid < 4.4 Browser ) der Browser stürzt einfach ab, der Browser tut nur so als sei er noch Verbunden und dann sind die Verbindungslimits auch noch von Browser zu Browser unterschiedlich.

Heute möchte ich mich den Websockets im Safari auf IOS widmen. Wenn man die Websockt-API "as designed" verwendet stürzt Safari ab oder friert ein, außerdem funktioniert die Verbindung nicht mehr wenn man aus dem W-Lan zur Mobilen Verbindung (GSM/3G/4G) wechselt oder umgekehrt.

Diesen Problemen kann man aber mit einem ganz einfach Trick her werden. Man wrapt die Calls mit einem setTimeout, so werden sie von der restlichen JavaScript Abarbeitungen entkoppelt und die Probleme gehören der Vergangenheit an.

 

Der Standard  WebSocket Code würde dann so aussehen:

var websockt = new Websocket('/path/to/websocket:1234');

setTimeout(function() {
	websockt.send('hello world!');
});

// good bye!
setTimeout(function() {
	websockt.close();
});