Realtime Web-Bibliotheken - ersetzen Sie die Hookbox mit socket.io oder was?

8

Ich habe ein paar Projekte, die mithilfe von hookbox erstellt wurden, um die Nachrichtenübermittlung in Echtzeit zwischen Webclients und Servern zu verwalten. Hookbox war großartig - es hat die Transportschicht völlig abstrahiert und eine einfache Publish / Subscribe-Schnittstelle über verschiedene Kanäle hinweg mit einem eleganten Sicherheitssystem freigelegt.

Leider ist das Hookbox-Projekt schnell in Unordnung geraten, weil der ursprüngliche Betreuer nicht bereit war, sogar den Versuch zu unternehmen, das Eigentum abzugeben. (Grrr!) Es ist daher schwer, es als eine lebensfähige Plattform zu betrachten.

Was ist eine gute Plattform für Echtzeit-Kommunikation mit Web-Apps? Anforderungen:

  • Arbeitet nahtlos über den Browser und verwendet HTML5-Websockets oder COMET als verfügbar. Die Transportauswahl sollte für die Anwendungsebene nicht sichtbar sein. Ich interessiere mich nicht für alte Browser (IE6)
  • Client-Zugriff sowohl von javascript- als auch serverseitigen Systemen (d. h. in php / python / ruby) - das ist kritisch
  • Bietet eine Publish / Subscribe-Metapher mit beliebigen Nutzdaten
  • Ermöglicht Clients zu sehen, welche anderen Clients mit einem Kanal verbunden sind, d. h. Präsenz
  • Fein abgestimmte Zugriffskontrolle durch Rückrufe auf beliebige Webanwendungen (nett zu haben)

Ich habe gehört, dass socket.io etwas davon tun kann, aber ich habe das Gefühl, dass es auf einer niedrigeren Schicht des Stapels ist. Kann es eine Verbindung zu Nicht-JavaScript-Bibliotheken herstellen? Do auth?

    
Leopd 17.07.2011, 18:31
quelle

3 Antworten

2

Obwohl ich es noch nicht ausprobiert habe, fing ich an, Pusher für einen Node Knockout 2011-Eintrag zu suchen. Zusätzlich zu JavaScript werden folgende Nicht-js-Clients unterstützt:

  • Ziel-C
  • ActionScript
  • .NET & amp; Silverlight
  • Ruby
  • Arduino

Wenn Nachrichten über einen Drittanbieter möglich sind, können Sie den Dienst kostenlos mit seinem Sandbox-Plan (20 Verbindungen und bis zu 100.000 Nachrichten / Tag) testen und prüfen, ob er Ihren Anforderungen entspricht. (Ich bin ein wenig unsicher bezüglich der "Anwesenheits" -Anforderung, obwohl sie in den Dokumenten behandelt werden kann.)

    
psema4 01.09.2011, 20:00
quelle
3

Ich hatte eine sehr gute Erfahrung mit NodeJS und Socket. IO in den letzten acht Monaten. Die serverseitige Komponente war sehr stabil für mich - ich kann es mit einem sehr hohen Nachrichtenvolumen laufen lassen und sein residenter Speicher bewegt sich nie wirklich über 20 MB. Bis jetzt konnte ich es nur für ungefähr 4 Wochen laufen lassen, ohne den Server zu beenden, aber das war nur, weil ich meinen serverseitigen Code aktualisieren musste.

  

Arbeitet nahtlos über den Browser und verwendet HTML5-Websockets oder COMET als verfügbar. Die Transportauswahl sollte für die Anwendungsebene nicht sichtbar sein. Alte Browser (IE6) interessieren mich nicht.

     

Bietet eine Publish / Subscribe-Metapher mit beliebigen Nutzdaten

Socket.IO ist auch eine fantastische Software. Es ist aktiv entwickelt und hat eine einfache Pub / Sub-Stil-Abstraktion, die mit der EventEmitter (NodeJS) Semantik von 'on' (subscribe) und 'emit' (publish) aufgebaut ist. Es ist auch sehr transparent auf der Clientseite bezüglich des Transports, der verwendet wird. Ich habe es hauptsächlich für die direkte WebSocket-Unterstützung verwendet, aber es kann auf Flash-basierte Sockets, xhr-polling und jsonp polling zurückgreifen.

  

Client-Zugriff sowohl von Javascript- als auch von Serverseiten-Systemen (d. h. in PHP / Python / Ruby) - das ist kritisch

NodeJS ist JavaScript und läuft auf der V8-Engine. Es hat eine Menge Module von Drittanbietern , die nette Abstraktionen bieten und mit externen Komponenten, wie Datenbanken, interagieren oder Nachrichtenwarteschlangen, unter vielen anderen Dingen. Was das System mit php / python / ruby ​​angeht, so würde es funktionieren wie mit jedem anderen Server. Wählen Sie Ihre Kommunikationsmethode (Basis TCP / IP oder vielleicht HTTP POSTs oder GETs oder sogar über Dateisystem) und NodeJS kümmert sich nicht wirklich darum, wer die Daten zur Verfügung stellt. Persönlich habe ich einen C # -Client implementiert, der großartig funktioniert.

  

Ermöglicht Clients zu sehen, welche anderen Clients mit einem Kanal verbunden sind, d. h. Präsenz

Es hat keine eingebaute Anwesenheitslogik, obwohl mit der eingebauten "pub / sub" -Logik, die bereits in Socket.IO vorhanden ist, alles, was Sie tun müssten, den Zustand auf dem Server speichern würde Neue Clients können vorhandene Anwesenheitsdaten abrufen. Ich habe mein eigenes basic pub / sub auf dem Server implementiert, der den Status behält, und alles zusammen (einschließlich des NodeJS-Servercodes und der Socket.IO-Basisstubs) waren nur 50 Zeilen JavaScript (einschließlich Leerzeichen).

>
  

Fein abgestimmte Zugriffskontrolle durch Rückrufe auf beliebige Webanwendungen (nett zu haben)

Ich bin mir nicht sicher, was Sie mit "Fein abgestimmte Zugriffskontrolle durch Rückrufe auf irgendeine Webanwendung (nett zu haben)" meinen. Die Pub / Sub-Ereignis / Beobachter Metapher sie Callbacks verwendet, so dass Sie bestimmte Aktionen auf bestimmte Ereignisse haken.

  

Do auth?

Ich hatte noch keine Notwendigkeit, ein Auth für unsere Systeme zu machen, also kann ich nicht direkt damit sprechen. Wenn Sie jedoch die NodeJS-Module durchsuchen, werden Sie feststellen, dass viele Authentifizierungsmodule verfügbar sind, darunter LDAP und OAuth, ganz zu schweigen von einem Modul das behauptet "OpenId, Google, OAuth, Twitter, LinkedIn, Yahoo, Lesbarkeit, Dropbox, Justin.tv, Vimeo, Tumblr, OAuth2, Facebook, GitHub, Instagram, Foursquare, Box.net, LDAP"

    
Matt 01.09.2011 16:49
quelle
0

Ich empfehle die Verwendung von node.js , die viele Bibliotheken für verschiedene Dinge enthält. Eine Bibliothek für Echtzeitnachrichten ist now.js . Ich habe nicht viel Erfahrung damit, aber ich habe es versucht und ich würde sagen, es hat gut funktioniert und hat alles, was Sie sagten, dass Sie brauchen.

    
Godisemo 03.09.2011 17:53
quelle