Forum: PC-Programmierung Websocket immer aufrecht erhalten?


von René P. (speedy909)


Lesenswert?

Hallo,

ich habe derzeit ein Problem mit meiner Websocket Verbindung. Ich habe 
eine lokale Internetseite auf der eine Websocketverbindung zu einem 
Server aufgebaut wird. Die Verbindung klappt problemlos, Daten können 
hin und her gesendet werden.

Das Websocket wird zwischen JavaScript (Client) und einem Python Script 
(Server) aufgebaut.

Eventuell habe ich ja ein Verständnisproblem...

Kann ich eine Socketverbindung überhaupt über die komplette 
Browsersitzung aufrechterhalten? Oder muss ich bei jedem Seitenwechsel 
(z.B. Aufruf einer Unterseite) eine neue Verbindung aufbauen?

Oder muss ich sorgar nach jeder Abfrage die Socketverbindung beenden?



Gruß
René

von Peter II (Gast)


Lesenswert?

René P. schrieb:
> Oder muss ich bei jedem Seitenwechsel
> (z.B. Aufruf einer Unterseite) eine neue Verbindung aufbauen?

wenn die Seite neu geladen wird, dann wird auch das JavaScript neu 
geladen und damit die vebindung neu aufgebaut.

Wenn du aber den Content selber über JavaScript austauscht, dann kann 
sein socket aktiv bleiben.

von René P. (speedy909)


Lesenswert?

Peter II schrieb:
> wenn die Seite neu geladen wird, dann wird auch das JavaScript neu
> geladen und damit die vebindung neu aufgebaut.


ok, Danke... so in der Richtung habe ich mir dass gedacht.

Dann habe ich jetzt nur noch folgendes Problem:
Ich baue meine Socketverbindung auf der Seite index.html auf (index.js). 
Das Socket ist nun aktiv und funktionsfähig, bleibt es vorerst auch. 
Wenn ich jetzt aber per Ajax den inhalt von einer weiteren Seite 
(seite2.html) nachlade, funktioniert hier meine Socketverbindung nicht.

Warum, kann ich mir momentan nicht erklären...
Ich verwende "Framework7" für meine Internetseite, da hier eine einfache 
Möglichkeit besteht eine WebApp für iPhone zu entwickeln...
http://www.idangero.us/framework7/examples/#.VYD7NGcw_Gg

Ich weiß das Framework7 eine neue Seite per Ajax nachlädt, aber warum 
mein JS nicht funktioniert kann ich mir nicht erklären.

Prinzipiell sollte ja in dem Fall ein nachladen über Ajax kein Problem 
für mein Websocket sein, wenn ich das richtig verstanden habe


Gruß
René

von Daniel A. (daniel-a)


Lesenswert?

René P. schrieb:
> Ich weiß das Framework7 eine neue Seite per Ajax nachlädt

Nun, das kan einfach überprüft werden:
1
// ungetestet
2
addEventListener("load",function(){alert("load or reload withoaut ajax");});
3
alert("script loaded");

Du solltest jedoch auch auf Verbindungsabbrüche aus anderen gründen 
vorbereitet sein:
1
// ungetestet
2
var ws;
3
function wsInit(){
4
  if(!navigator.onLine||ws&&ws.readyState==ws.OPEN)
5
    return;
6
  ws = new WebSocket("host","protocol");
7
  ws.onerror = wsInit;
8
  ws.onopen = function(){
9
  };
10
}
11
wsInit();
12
addEventListener('online',wsInit);

von René P. (speedy909)


Lesenswert?

Daniel A. schrieb:
> Nun, das kan einfach überprüft werden:
>
1
> // ungetestet
2
> addEventListener("load",function(){alert("load or reload withoaut 
3
> ajax");});
4
> alert("script loaded");
5
>


Danke Daniel!
Das hat mir weitergeholfen... Ich bin darauf gekommen dass ein per Ajax 
geladener JS Code anscheinend gar nicht erst ausgeführt wird! (zumindest 
in diesem "Framework7")
Als ich dann eine Lösung hierzu gesucht habe, bin ich drauf gekommen, 
dass ich eine Kleinigkeit in meinem HTML Code übersehen habe..
1
<div data-page="xxxx" class="page">

Diese mit xxxx markierte Stelle war bei all meinen Seiten immer gleich, 
dadurch konnte dieses Framework die einzelnen Seiten nicht mehr 
unterscheiden, und es war kein Zugriff über eine eigens dafür 
existierende "my_app.js" machbar, da alle aufgerufenen Seiten den selben 
Namen hatten...
1
myApp.onPageInit('seiteX', function (page) {
2
  alert("seiteX wurde besucht!");
3
});

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.