Google App Engine-Channel-API

7

Ich versuche GAEs Kanal-API (mit Java) zu lernen, aber ich kann nicht herausfinden, wo ich anfangen soll.

Ich habe die Channel-API-Übersicht (Java) durchsucht, aber der dort angegebene Code war nicht vorhanden Aus Platzgründen nicht vollständig.

Und da ich Neuling bin, wäre es sehr hilfreich, wenn der vollständige Beispielcode verfügbar ist.

Danke, Shrey

    
Shrey 25.11.2011, 15:37
quelle

2 Antworten

32

Der Code in der Channel-API-Übersicht, den Sie verlinkt haben, ist ziemlich komplett, es ist nur ein bisschen überall. Ich gebe zu, sobald ich es verstanden habe, fühle ich mich, dass es viel einfacher ist, als wie sie es scheinen lassen, aber ich bin froh, dass sie sich geirrt haben auf der Seite von zu viel Information.

Es ist ein bisschen schwierig, eine vollständige Lösung dafür zu finden, ohne dass fremde Informationen einstreuen, da einige davon, wie Sie die Channel-API verwenden, ein wenig von der Infrastruktur Ihrer bestehenden App abhängen. Aus diesem Grund habe ich versucht, ein wenig darüber nachzudenken, was die AppEngine-Dokumentation bietet, damit Sie hoffentlich besser verstehen können. Mit Kommentaren können Sie spezifische Fragen stellen, falls Sie welche haben sollten.

Erstens, ein bisschen Vokabular:

  • Kanalnachricht: Die Nachricht, die Sie an die Clients gesendet haben möchten (und wahrscheinlich den Grund, warum Sie die Channel-API von Anfang an verwenden).
  • Kanalschlüssel: Eine Zeichenfolge, die für den Benutzer und den Bereich, in dem der Benutzer versucht, eine Nachricht zu senden, eindeutig ist.
  • Channel Token: Eine Zeichenfolge, die für jeden Client eindeutig ist. 1 Kanal Token pro Kunde pro 2 Stunden.
  • Channel Service: Die serverseitige AppEngine-Klasse, mit der Sie Channels erstellen und Channel-Nachrichten über sie senden können.

Auf dem Server müssen Sie Folgendes ausführen:

%Vor%

Sobald Sie das Token haben, brauchen Sie nur einen Weg, um es zum clientseitigen Code zu bekommen. Das AppEngine-Dokument, mit dem Sie verknüpft haben, führt dies durch, indem es den HTML-Code vom Java-Servlet aus bereitstellt und index.replaceAll("\{\{ token \}\}", token) aufruft.

Wie dies funktioniert, ist, dass sie die literale Zeichenkette {{ token }} in ihren JavaScript-Code gesetzt haben (wie Sie unten sehen werden). Wo also {{ token }} im JavaScript-Code erscheint, wird sie durch die ersetzt tatsächliches Token, das durch den oben genannten Aufruf channelService.createChannel(...) generiert wurde. Beachten Sie, dass Sie nicht benötigen, um das Token in den clientseitigen Code zu injizieren, den Sie auf diese Weise bereitstellen, aber es ist ein guter Anfang, da sie es so gemacht haben ( und dokumentierte es).

Nachdem Sie nun das Token in das JavaScript eingefügt haben, müssen Sie den Code mit dem Channel-Token an den Client senden . (Beachten Sie, dass Sie, wie oben erwähnt, nur das Token für den Client erhalten und den Kanal auf diese Weise erstellen können) . Der Code, wie sie es haben, ist:

%Vor%

Sie schneiden die Details aus, wie man das aus einer Datei auf dem Server liest, aber das können Sie auch wieder so machen, wie Sie möchten. Sie könnten die Zeichenfolge auch einfach mit resp.getWriter().print(index) in Ihrem JavaServlet drucken, wobei index eine Zeichenfolge ist, die den oben aufgeführten HTML / JavaScript-Inhalt speichert. Wie ich eingangs gesagt habe, bleibt Ihnen viel übrig, was am besten zu Ihrer bestehenden Infrastruktur passt.

Sie möchten, dass Sie Ihre eigenen JavaScript-Funktionen onOpened , onMessage , onError und onClose definieren, die beim Öffnen von Channels, beim Empfang einer Nachricht, beim Auftreten eines Fehlers oder beim Schließen von Channels aufgerufen werden . Vielleicht möchten Sie einfach naive Implementierungen erstellen, um besser zu verstehen, was vor sich geht:

%Vor%

Ich empfehle immer noch, sie in separate Funktionen aufzuteilen, damit du sie leichter erweitern kannst, um herumzuspielen und Dinge herauszufinden. Weitere Informationen zur JavaScript-API finden Sie in der Channel-API-JavaScript-Referenz .

>

Sie müssen einen Mechanismus einrichten, um die Daten zu erhalten, die Sie vom Client an den Server senden möchten . Noch einmal, wie du das machen willst ist egal. Die AppEngine-Dokumentation schlägt vor, ein XMLHttpRequest einzurichten, um diesen Zweck zu erfüllen.

%Vor%

Hier ist opt_param nur eine Zeichenfolge optionaler Parameter im Format x=1&y=2&z=3 . Dies ist die gesamte Infrastruktur, die sie für ihre Tic-Tac-Toe-Beispielanwendung erstellt haben, und ist nicht entscheidend für die Funktionalität der Channel-API. Wie ich schon sagte, Sie können diesen Anruf so tätigen, wie Sie wollen.

path ist der Pfad zu Ihrem Servlet (das Sie in Ihrer Datei web.xml einrichten müssen), das mit dem Senden und Empfangen von Nachrichten umgehen soll (siehe folgenden Abschnitt).

Nachdem Sie die Nachricht vom Client an den Server gesendet haben, benötigen Sie ein Servlet, das eine Aktualisierung an alle Clients mit demselben Kanalschlüssel senden kann .

%Vor%

Der obige Aufruf channelService.sendMessage(...) ist das, was die Nachricht tatsächlich sendet, damit sie von der Funktion onMessage , die Sie im vorherigen Abschnitt definiert haben, empfangen werden kann.

Ich hoffe, dass diese Antwort vollständig (und richtig genug) ist, um Ihnen den Einstieg zu erleichtern. Das meiste, was sie in die Dokumentation geschrieben haben (und mein Code hier), kann kopiert und eingefügt werden, mit nur minimalen Verbesserungen.

    
Jon Newmuis 25.11.2011, 16:54
quelle
13

Ich bin neu bei StackOverflow und bin mir nicht sicher, ob diese Frage noch offen ist. Wenn Sie jedoch immer noch ein vollständiges Java-Beispiel mit der Channel-API von Google suchen, können Sie sowohl ServerSide (Java) als auch Client (Java) finden ausführliche Beschreibung habe ich hier aufgeschrieben: Ссылка

Er legt alles von der Erstellung eines Channels (Client & Server) über das Senden einer Nachricht auf einem Kanal (Client & Server) sowie ein einfaches Framework, das Java-Clients verwenden können, um mit Channels zu interagieren. Ich hatte auch Schwierigkeiten, Googles Dokumentation zu verstehen und einen Sinn für alles zu finden. Ich hoffe, dass diese Informationen noch relevant und hilfreich sind: -)

Der vollständige Quellcode und das Chat-Beispiel finden Sie auf GitHub: Ссылка

Hier ist ein Beispielcode, ich hoffe, das hilft: -)

Java-Client-Side-Channel-Erstellung (unter Verwendung von ChannelAPI Framework: Jacc)

%Vor%

Java Server Side Channel Erstellung:

%Vor%

Senden von Java Client-Nachrichten (mit ChannelAPI Framework: Jacc)

%Vor%

Java Server Side Message Senden:

%Vor%     
riptide464c 09.02.2012 17:02
quelle