Szenario: Die Backend -Update -Daten werden an den Client weitergeleitet (der Java -Teil verwendet den Tomcat -Server).
Es gibt viele Lösungen, um Daten im Backend zu überschreiten, wie z. B. Umfragen, Kometen und Websocket.
1. Umfragen sind die niedrigsten Entwicklungskosten für das Backend, was bedeutet, dass AJAX -Anfragen und die Rückgabe von Daten auf traditionelle Weise verarbeitet werden. Als ich in der Schule war, haben die Laborprojekte immer Umfragen genutzt, da es am sichersten und am einfachsten umgesetzt werden kann. Die durch Umfragen verursachte Verschwendung von Kommunikationsressourcen kann jedoch nicht ignoriert werden. Unabhängig davon, ob sich die Daten ändert oder nicht, wird die Anfrage wie gewohnt gesendet und beantwortet, und jede HTTP -Anfrage enthält eine lange Header -Informationen.
2. Das Konzept des Kometen ist eine lange Verbindung. Nachdem der Client eine Anfrage gesendet hat, hält der Backend die Verbindung, bis die Verbindung zeitlich festgelegt ist oder das Backend Daten zurückgibt, und stellt dann die Verbindung wieder her, wodurch die Kommunikationsressourcen effektiv an den Server übertragen werden, der tatsächlich Serverressourcen verbraucht.
3.. WebSocket ist eine von HTML5 bereitgestellte Full-Duplex-Kommunikationstechnologie. Es realisiert die Kommunikation zwischen dem Client und dem Server über "Handshake". Es hat eine gute Echtzeitleistung und einen kleinen Kopf. Die derzeit unterstützten Browser sind wie folgt:
Die ideale Situation besteht darin, die Kombination von Websocket und Komet zu verwenden und die Comet -Methode zu verwenden, um Browser wie IE8 herabzustufen. Auf diese Weise muss das Backend jedoch zwei Logik für die Verarbeitung von Anforderungen implementieren, nämlich WebSocket und Comet. Daher hat dieser Artikel Node.js. Der Grund dafür ist die Übertragung der Logik, die WebSocket (oder Comet) auf den Node.js-Teil übernimmt und nicht "Schwierigkeiten" zum Backend induziert, da es für Front-End-Entwickler in tatsächlichen Situationen nicht einfach ist, Back-End-Entwickler zu fördern. Node.js ist die Zwischenschicht für die Kommunikation zwischen dem Browser und der Java Business Logic Layer, der Kunden mit Tomcat verbindet und mit Tomcat über Socket kommuniziert (es handelt sich um Socket, nicht WebSocket, und das Backend muss die Socket -Schnittstelle implementieren.
Auf dem Client werden Websocket und Comet über Socket.io implementiert. Socket.io wählt die entsprechende Implementierungsmethode (WebSocket, Long Pull ..) für verschiedene Browserversionen oder verschiedene Clients aus. Die Einführung von Socket.io erleichtert es einfach, Websocket (oder eine lange Verbindung) zu verarbeiten. Socket.io
Der Kunde führt Socket.io vor:
<script src = "static/js/socket.io.js"> </script>
Client JavaScript -Code:
var socket = io.connect ('127.0.0.1:8181'); // Daten an den Server -Socket senden.Node.js Servercode:
var http = required ('http'), app = http.createServer (). Hören ('8181'), io = Request ('Socket.io'). Listen (App); io.sockets.on ('connection', function (socketio) {// Daten aus der Client -Socketio.on ('fromWebclient', Funktion (WebclientData) {// do sth.}); // Client -Disconnect -Socketio.on ('disconnect', Funktion () {console.log ('disconnected -diskonted -diskonted -diskonted von client';; Socketio.Emit ('PushTowebclient', JSondata);Das Erstellen einer guten Verbindung zwischen dem Client und dem Node.js -Server ist nur der erste Schritt. Im Folgenden muss auch eine Verbindung zwischen dem Node.js -Server und der Java Business Logic Layer hergestellt werden. Zu diesem Zeitpunkt dient der Node.js -Server als Client, um eine TCP -Verbindungsanforderung an Tomcat zu senden. Nachdem die Verbindung erfolgreich ist, stellen der Node.js -Server und Tomcat einen vollständigen Duplex -Kanal ein, und er ist der einzige. Unabhängig davon, wie viele Client -Anfragen sind, werden sie vom Node.js -Server an Tomcat weitergeleitet. In ähnlicher Weise wird die von Tomcat gedrängten Daten auch über den Node.js -Server an jeden Client verteilt.
Hier gibt es ein Problem, dh nach der Herstellung von Websocket -Verbindungen und Sockelverbindungen sind die beiden Verbindungen blockiert. Tomcat weiß weder, welche WebSocket -Verbindung die Daten gesendet hat, noch weiß er, welcher Client die Daten gesendet hat. Natürlich kann Node.js die Sitzungs -ID verwenden, um an Tomcat zu senden, um herauszufinden, welcher Client es ist. Dieser Artikel verwendet jedoch eine andere Methode.
Wenn ein Client eine WebSocket -Verbindung mit node.js herstellt, enthält jede Verbindung eine Instanz, die hier als Socketio bezeichnet wird. Jede Socketio hat ein ID -Attribut, um diese Verbindung eindeutig zu identifizieren, die hier als Socket_ID bezeichnet wird. Unter Verwendung von Socket_ID wird auf dem Node.js -Server eine Zuordnungstabelle festgelegt, um die Zuordnungsbeziehung zwischen jedem Socket und Socket_ID zu speichern. Wenn der Node.js -Server Daten an Tomcat sendet, wird der Socket_ID mitgelegt, und dann führt das Java -Teil eine Reihe von Verarbeitungen durch, verkaps dann die verschiedenen Daten, die von jedem Client erforderlich sind, und gibt sie zurück. Die zurückgegebenen Daten müssen eine entsprechende Beziehung zu Socket_ID haben. Wenn der Node.js -Server die von Tomcat gesendeten Daten erhält, wird er über die oben erwähnte Mapping -Tabelle an verschiedene Clients verteilt.
Node.js Servercode:
var http = required ('http'), net = required ('net'), app = http.createServer (). Listen ('8181'), io = Request ('Socket.io'). // Verbindung zu Tomcat nodesserver.connect (8007, '127.0.0.1', Funktion () {console.log ('Connected'); // Erstellen Sie eine Verbindung mit dem Client io.sockets.on ('Verbindung', Funktion (Socketio) {// Daten vom Client empfangen und an tomcat socketio.on ('fromWebclient', function (webclientData) {// Speichern Sie die Mapping -Tabelle als SOCKTIO.ID] webclientData ['SID'] = Socketio.id; }); // Daten von tomcat nodesserver.on ('data', function (data) {var jSondata = json.parse (Data.ToString ()) empfangen; // Daten an client für (var i in jSondata.List) {asocket [jSondata.list [i] ['sid']. jSondata.List [i] .data);Der obige Code lässt eine Logik aus, z. B. die vom Node.JS -Server von Tomcat empfangenen Daten sind in zwei Typen unterteilt. Einer ist die gedrückten Daten und der andere sind die Daten, die auf die Anforderung reagieren. Hier werden die gedrängten Daten einheitlich verarbeitet.
Bei der Verarbeitung der Kommunikation sind die von Node.js an Tomcat gesendeten Daten im String-Format, und die von Tomcat empfangenen Daten sind ein Pufferobjekt (acht Byte), das in Zeichenfolge konvertiert und dann in JSON konvertiert und an den Client gesendet werden muss.
Dieser Artikel enthält nur ein einfaches Beispiel für solche beiden Verbindungen, und viele Dinge müssen dem spezifischen Unternehmen hinzugefügt werden. Da Node.js in das Projekt eingeführt wird, muss das Front-End mehr Dinge wie Bearbeitung, Zwischenspeichern und sogar viel Geschäftslogik durchführen.