Frage

(Ich bin mit Ruhestand nicht vertraut, bitte korrigieren Sie mich, wenn mein Konzept falsch ist)

In der erholsamen Architektur kartieren wir jede Aktion einer URL. Wenn ich klicke "einen Artikel posten", kann es tatsächlich eine URL sind http://example.com/ und einige Daten action=post&content=blahblah.

Wenn ich posten möchte, aber die gesamte Webseite nicht aktualisieren möchte, kann ich JavaScripts XMLHTTPrequest verwenden. Ich poste es und bekomme dann den Inhalt und füge es in eine DIV in meine Seite ein. Diese Aktion ist alle asynchron.

Dann weiß ich, dass etwas genannt wird WebSocket Und es ist Wrapper socket.io. Es wird "Nachricht" verwendet, um zwischen Client und Server zu kommunizieren. Wenn ich den Client auf "posten" klicke, rufen Sie einfach an socket.send(data) und warte auf Server client.send(data). Es ist magisch. Aber wie wäre es mit URL?

Es ist möglich, das beiden Modell beides zu verwenden, ohne mich selbst zu wiederholen? Mit anderen Worten hat jede Aktion ihre URL, und einige von ihnen können mit dem Benutzer real timely interagieren (von Socket.io?)

Soll ich das außerdem tun? In einem sehr interaktiven Webprogramm (Ex. Games) ist das Ruhige immer noch sinnvoll?

War es hilfreich?

Lösung

Sie definieren einen Handler für Aktionen, die sich über HTTP ausruhen. Posten Sie und beziehen Sie sich im Allgemeinen auf Aktualisierung und Abfrage über ein Unternehmen. Es gibt absolut keinen Grund, warum Sie einen Handler nicht einfach für generische Versionen dieser CRUD -Operationen definieren können, die in beiden Kontexten verwendet werden können. Die Art und Weise, wie ich dies im Allgemeinen mache, besteht darin, das Konzept einer „Route“ in den Echtzeittransport einzuführen und diese zurück zu denselben Crud-Handlern zuzuordnen.

Sie haben eine Sitzung, Sie können dieselbe ACL usw. auferlegen.

 +---------------------------------+
 |                                 |
 |      BROWSER                    |
 |                                 |
 +--+--^-------------------+---^---+
    |  |                   |   |
    |  |                   |   |
 +--v--+---+            +--v---+---+
 |         |            |          |
 | HTTP    |            | SOCKET.IO|
 +--+---^--+            +--+---^---+
    |   |                  |   |
 +--v---+------------------v---+---+
 |                                 |
 |        ROUTING/PUBSUB           |
 +-+--^-------+--^-------+--^------+
   |  |       |  |       |  |
 +-v--+--+  +-v--+--+  +-v--+-+
 |       |  |       |  |      |
 | USERS |  | ITEMS |  |ETC   |
 +-------+  +-------+  +------+
     ENTITY CRUD HANDLERS

Andere Tipps

ich hat dies in meinem Blog gepostet in letzter Zeit:

Entwerfen einer CRUD -API für Websockets

Beim Bauen Schweißen, Wir verwenden sowohl Ruhe als auch Websockets (Socket.io). Drei Beobachtungen auf Websockets:

  1. Da Websockets so frei von Form ist, können Sie Ereignisse so nennen, wie Sie es möchten, aber es wird irgendwann unmöglich zu debuggen.
  2. WebSockets verfügt nicht über die Anfrage/Antwortform von HTTP, sodass es manchmal schwierig sein kann, zu sagen, woher ein Ereignis kommt oder zu dem kommt.
  3. Es wäre schön, wenn die Websockets in die vorhandene MVC -Struktur in der App passen könnten, vorzugsweise mit denselben Controllern wie die Rest -API.

Meine Lösung:

  • Ich habe zwei Routing -Dateien auf meinem Server: Routes-rest.js und Routensockets.js
  • Meine Ereignisse sehen wie dieses Beispiel aus: "AppServer/user/create".
  • ich benutze Schrägstriche vorwärts ("/") Damit die Ereignisse wie Routing -Pfade aussehen lassen.
  • Die erste Zeichenfolge ist die Ziel (~ "Hostname", wenn dies tatsächlich ein Weg war).
  • Die zweite Zeichenfolge ist die Modell.
  • Die dritte Zeichenfolge ist die Rohrverb: dh erstellen, lesen, aktualisieren, löschen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top