asynchrone Datenübertragung

ooppoo

Grünschnabel
Hallo!

Ich möchte einen Chat mit AJAX programmieren.

Dazu hätte ich zuerst eine theoretische Frage: worauf muss man grundsätzlich bei AJAX aufpassen, wenn man asynchron arbeitet?

2 Punkte wäre mir schon eingefallen:

- es könnte nötig sein, einen Response seinem Request zuordnen zu müssen
- die korrekte Reihenfolge der Responses könnte wichtig sein

Gibt es noch weitere wichtige Punkte?
Kennt zufällig jemand eine Webseite, wo auf mögliche Probleme bei asynchroner Datenübertragung eingegangen wird?
 
Man sieht das du dich noch nicht wirlich mit dem Thema AJAX beschäftigt hast.
1) Du brauchst auf dem Server mindestens ein Script was deine Daten verarbeitet. Besser wären hier zwei Scripts mit geteilten Aufgaben.
2) Die "Zuordnung des Response zum Request" übernimmt AJAX für dich bereits. Da musst du nichts selbst machen.
3) Die Reihenfolge der Responses richtet sich nach der Reihenfolge der Requests *wenn das ganze System schnell genug ist*.

Zu empfehlen ist das JQuery-Framework. Ein gutes Tutorial dazu findet man bei YouTube.

Ich als Java-Entwickler würde dir aber dennoch von einem solchen Chat abraten da er eine extreme Belastung für den Server darstellt. Es gibt sogar Hoster die einem solche Systeme untersagen da sich die Belastung die dadurch von einem Kunden verursacht wird negativ auf andere Kunden auswirken kann. Da würde ich mich also erstmal beim Hoster erkundigen ob du sowas überhaupt laufen lassen darfst.
Auch müsste man ein relativ zeitnahes aber nicht zu agressives Poll-Timeout festlegen um den Chat einerseits halbwegs realtime zu machen , andererseits aber die Server-Resourcen nicht zu sehr zu verschwenden.

Auch ist es mit AJAX recht schwierig sowas zu realisieren da du eigentlich Threads bräuchtest die es in JavaScript aber nicht gibt. Frag doch einfach mal Google oder guck bei uns in der Tutorials-Sektion nach ob du was entsprechendes findest.

meine persönlich Meinung : lös es mit Flash oder Java ... da hast du wenigstens Threads ... und du brauchst einen entsprechenden Chat-Server ... ein normaler HTTP-Server ist damit irgendwann am Limit.
 
2) Die "Zuordnung des Response zum Request" übernimmt AJAX für dich bereits. Da musst du nichts selbst machen.
Hierzu würde ich mir gerne ein Programmierbeispiel anschauen. Hast du zufällig ein Script bei der Hand oder kennst du eine Webseite, wo das beschrieben wird?
 
Im folgenden Beispiel siehst du, wieso Request1 auch immer Response1 zurückliefert, auch wenn du 20 Requests absetzt.
Du erzeugst in einer Funktion das Objekt und arbeitest bis zur Response mit diesem Object weiter.

Jeder Request erzeugt sein eigenes Objekt, eine Vermischung ist somit ausgeschlossen.
Javascript:
function setRequest(url,target) {

  var req = null;

  // Request-Objekt erzeugen
  try{
      req = new XMLHttpRequest();
  } catch (e){
     alert("Error creating request object!");
     return false;
  }

  // Request absetzen und Response abwarten
  req.open("GET", url, true);
  req.onreadystatechange = function(){  
      switch(req.readyState) {
          case 4:
              if(req.status!=200) {
              }else{
                    $(target).innerHTML = req.responseText;
              }
            break;
          default:
              return false;
            break;
      }
  };

  req.send(null);
 
Zuletzt bearbeitet von einem Moderator:
Angenommen, ich schicke 2 Requests ab:

- Request 1
- Request 2 1 Sekunde danach

Beim Server ist zum Test eine Verzögerung eingebaut:

- Response 1 zum Request 1 wird 5 Sekunden verzögert
- Response 2 zum Request 2 wird jedoch sofort weggeschickt

Response 2 kommt dann vor dem Response 1 beim Client an.

Und der umgekehrte Fall:

- Response 1 zum Request 1 wird sofort weggeschickt
- Response 2 zum Request 2 wird jedoch um 5 Sekunden verzögert

Jetzt kommt garantiert Response 1 vor Response 2 beim Client an.

Kann man in beiden Fällen den Response dem korrekten Request zuordnen?
 
Ganz erlich : das ist jetzt eine Fangfrage oder ?
Lies dich dazu mal bitte in Themen wie HTTP , statefull / stateless connections , Sockets / Streams , TCP und vorallem OOP ein.

Um es dir mal zu veranschaulichen :

Request1 wird erzeugt und verschickt ...
dabei wird TCP-Verbindung1 zum Server aufgebaut und HTTP-Session1 läuft an ...
TCP-Verbindung1 in der HTTP-Session1 läuft wird aufrecht erhalten bis der Server antwortet ... EGAL wie lange das dauert *höchstens bis zum TimeOut* ... und sagen wir mal das jetzt hier auf dem Server die 5sec Verzögerung drin sind

In dieser Zeit wird Request2 erzeugt.
Es wird eine neue TCP-Verbindung2 zum Server aufgebaut ... und darin eine neue HTTP-Session2 ...
Auf dieses Request antwortet jetzt der Server sofort. Nach der Antwort wird die HTTP-Session2 beendet und TCP-Verbindung2 abgebaut. Damit ist Response2 da und dank OOP an Request2 gekoppelt. Damit wird nun weitergearbeitet.

Endlich trifft auch das Response1 zu Request1 ein. Da die Verbindung über die Request1 abgesetzt wurde offen gehalten wurde da ja noch auf ein Response1 gewartet wurde wird dieses Respons1 ganz klar dem Request1 zugeordnet.

Du hast scheinbar weder Grundlagen noch Verständnis über solche Vorgänge. Ich empfehle dir DRINGEND dich in die von mir genannten Bereiche einmal einzulesen.
 
Ich als Java-Entwickler würde dir aber dennoch von einem solchen Chat abraten da er eine extreme Belastung für den Server darstellt.
Was prädestiniert einen JAVA Entwickler bei Javascript Schützenhilfe zu leisten?

Auch ist es mit AJAX recht schwierig sowas zu realisieren da du eigentlich Threads bräuchtest die es in JavaScript aber nicht gibt.
****? Wiso sollte der Chat Threads benötigen

meine persönlich Meinung : lös es mit Flash oder Java ...
1. benötigst Du nach wie vor einen Server
2. Setzen beide Vorschläge zusätzliche Software vorraus was bei JS nicht der Fall ist.

Schuster bleib bei Deinen Leisten!
Danke
 
Auch ist es mit AJAX recht schwierig sowas zu realisieren da du eigentlich Threads bräuchtest die es in JavaScript aber nicht gibt. Frag doch einfach mal Google oder guck bei uns in der Tutorials-Sektion nach ob du was entsprechendes findest.

Threads braucht man eigentlich gar nicht. AJAX arbeitet normalerweise schon selber mit Threads asynchron. Sprich du gibst einfach eine Callback-Funktion an.

2. Setzen beide Vorschläge zusätzliche Software vorraus was bei JS nicht der Fall ist.
Ein Chat nur mit JS wird nicht funktionieren. Dazu brauchst du noch eine serverseitige Skriptsprache, sei es PHP, Perl oder Java.
 
Threads braucht man eigentlich gar nicht. AJAX arbeitet normalerweise schon selber mit Threads asynchron. Sprich du gibst einfach eine Callback-Funktion an.

Das hat nichts mit Threads zu tun. Bevor ein Event ausgeführt wird, wird der aktuellen Programmablauf unterbrochen. Es laufen nie Sachen "echt" parallel. Deshalb ist auch node.js so performant.

Ein Chat nur mit JS wird nicht funktionieren. Dazu brauchst du noch eine serverseitige Skriptsprache, sei es PHP, Perl oder Java.

http://nodejs.org/
http://socket.io/
 

Neue Beiträge

Zurück