5 Stimmen

Server-seitiger Push in Rails

Ich möchte einen skalierbaren Chatroom in Schienen mit AJAX zu implementieren. Ich weiß aus der Forschung, dass die einzige Skalierbarkeit mit einem Server-seitigen Push geschieht.

Meine zwei Fragen sind:

1) Ab welchem Punkt wird das Polling bei einem einigermaßen effizienten Chatserver unerschwinglich? 2) Ich möchte Juggernaut wirklich nicht benutzen. Ich weiß nicht viel darüber, wie Comet funktioniert. Ich schätze, ich frage mich, ob es für mich furchtbar schwierig wäre, Javascript (um einen clientseitigen Server/Poller zu erstellen) und eine andere Sprache (um effizientes Polling für Clients hinter einer Firewall und eine Integration in das CGI zu ermöglichen) zu verwenden. und 3) (ja, von 2), ob ich überhaupt über es der richtige Weg gehen?

Die einfachste Antwort, die ich mir erhoffen könnte, ist ein quantifiziertes "Ja, man fügt 5 Zeilen Javascript in den Client und 20 Zeilen Ruby in ein CGI-Skript ein, und fertig".

2voto

Ich versuche gerade, dasselbe zu tun. Juggernaut funktioniert gut, aber nicht für Rails 3, und wenn das keine Voraussetzung ist, dann schlage ich vor, es zu benutzen, weil es verdammt einfach ist, einen Chat zu machen. Mein Projekt verwendet Rails 3, und pollt den Server alle 3 Sekunden (Campfire tut 3 als auch). Ich verwende Rails Metal, um das Polling superschnell zu machen. Wenn Sie Juggernaut verwenden möchten, dann großartig, 2 Zeilen der Client-Seite js, und 1 oder 2 der Server-Seite. Ansonsten, an die Arbeit gehen!

1voto

allesklar Punkte 9238

Ja, man fügt 5 Zeilen Javascript in den Client und 20 Zeilen Ruby in ein CGI-Skript ein und schon ist alles erledigt.

1voto

cgreeno Punkte 30732

Wenn es so einfach wäre, hätte man diese Technologien nicht entwickelt. IMHO denke ich, dass Umfragen immer eine umständliche Methode sein werden. Das sagte....

Ich bin mir nicht sicher, warum Juggernaut von den Karten gestrichen ist. Ein Typ, für den ich arbeite, hat diese Seite aufgebaut. 64Quadrate damit und es funktioniert hervorragend.

Ich kenne andere Websites wie WeeWar die Abfragemethode verwenden und bis zu 400 Anfragen pro Minute haben. Ich denke also, dass es einige Zeit dauern würde, bevor die Skalierung ein Problem wird.

Viel Glück!

Prost

0voto

COMET arbeitet, indem es die Verbindung zum Server in Javascript offen hält (auf der COMET-Website gibt es zahlreiche Beispiele, wie man diese asynchronen Daten erhält). Der Server schreibt im Wesentlichen die Daten heraus und spült sie, dies kann mit einem Mutex in einer engen Schleife geschehen. Wahrscheinlich benötigen Sie auch eine Art von Nachrichtenwarteschlange.

Es ist vielleicht besser, sich über BOSH auf lange Sicht. Es ist die natürliche Weiterentwicklung von COMET.

Obwohl Juggernaut eine Lernkurve hat (oder vielleicht auch nicht), ist die Lernkurve für COMET noch steiler. Selbst das asynchrone Pushen ist schwieriger. Nicht nur das, aber Sie müssen dann überlegen, wie man es gut skalieren kann. Ich habe Juggernaut nie benutzt, aber was ROR-Plugins angeht, nehme ich an, dass es trivial ist. Und wenn man herausfindet, wie man es besser skalieren kann, bekommt man eine schnellere Leistung umsonst.

Polling ist eine weitere Option, die technisch funktionieren sollte Einfacher Ich bin jedoch leidenschaftlich über die Verwendung von Polling nicht, wie es Ihren Server töten kann - so werde ich nicht auf sie hier, weil ich das Gefühl, dass Polling ist der faule Weg.

0voto

August Lilleaas Punkte 52649

Was ist mit Campfire? Es fragt den Server alle 5 Sekunden ab. Funktioniert wie ein Traum.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X