Frage

Ich versuche, eine Streaming-Lösung für eine interne app zu bauen, aber Rohlingen bin Zeichnung für eine Lösung an einer Straßensperre zu erhalten. Derzeit in meinem Arbeitsbeispiel, ich bin mit APE , aber aufgrund von Beschränkungen kann ich nicht irgendwelche Fremd laufende Prozesse auf dem Host-Rechner, so dass ich nicht den APE-Server ausgeführt werden kann.

Ich bin die Suche nach Alternativen, aber alles, was ich bisher gefunden habe erforderliche Prozesse auf dem Server ausgeführt wird.

Einige Details über das Projekt.

  • Es werden etwa 25 Menschen auf einmal
  • verbunden sein
  • Im Idealfall sollte jeder die Updates zur gleichen Zeit sehen, sobald sie verfügbar sind.
  • Es wird in einer Windows-Umgebung ausgeführt werden, so C # /. NET-Lösungen vorzuziehen Dinge wie PHP wären.

Wer irgendwelche Ideen haben, wenn node.js Lage ist der Umgang mit diesem oder von irgendwelchen anderen Lösungen?

War es hilfreich?

Lösung

Das Problem ist, dass die traditionelle Web-Server einen Thread pro Socket Ansatz verwenden, um gleichzeitigen Benutzers Umgang mit dem für Kometen / lange Polling Techniken nicht immer optimal ist. (Neuere Versionen von IIS haben einen Weg jedoch in der eigenen Verbindung Handler stopfen, die ich auch unten bekommen.)

Für den traditionellen Web-Server, häufiger das Ziel ist, eine Verbindung zu bekommen, dazu dienen, den Benutzer auf etwas so schnell wie möglich, und Umzug in die nächsten Verbindung. Wenn eine Verbindung für eine lange Zeit anhaltenden, seine, weil seine wahrscheinlich etwas zu tun, intensiv, wie ein großer Download oder große Abfrage, aber insgesamt ist es aktiv mit der CPU, so dass die Gewinde Modell ziemlich gut funktioniert.

In Kometen (long Polling), normalerweise Sie zu einem Web-Server verbinden, wo man nur ein Ereignis warten, auftritt, und mehr als oft nicht. Dies fördert mehr gleichzeitige Verbindungen. Auch chacnes sind, dass viele dieser Benutzer auf die gleichen Ereignisse warten auf der ganzen Linie zu kommen.

einen Thread Zuweisung dann für einen Benutzer in erster Linie nur Spin und Wartezeit ist nicht ein sehr optimales Modell für diese Art der Sache. Ein besseres Modell ist ein Ereignis-Schleife-basierter Web-Server, der alles in einer asynchronen Art von Mode tut, und wo aus einem Ereignisse an mehr Benutzer Dispatching beinhaltet nicht einen teueren Kontextwechsel für jeden Kunden. Das, was Node.js auf (mit libevent als Kern) gebaut sowie Ruby-eventmachine, Verdreht Python, Friend Tornado, Jetty und der C # basierend Manos Server.

Das ist, warum es oft ist es vorteilhafter Komet auf seinen eigenen Prozess benutzerdefinierte da Servern wie Apache und ältere Versionen von IIS traditionellen Web einen benutzerdefinierten Server getan haben Funktion nicht in einer Angelegenheit, die die Bedürfnisse effizient für Comet ist.

Standard ASP.NET-Anwendungen sind wenig geschraubt, weil Thread-Pool in .NET auf 25 allgemeine Themen beschränkt ist und 25 IO-Threads (und HTTP-Verbindungen nehmen einen IO-Thread). Sie können effektiv als in Wirklichkeit sein etwas weniger begrenzt, da der Thread-Pool mit all den anderen Dingen in .NET geteilt wird. Sie können die Thread-Pool stoßen allerdings mit einer Konfiguration jedoch einstellen, aber die Leistung hat eine Tendenz exponentiell die mehr Threads Sie werfen zu zerfallen. Man könnte diese Zahl in der Theorie stoßen, wenn Sie garantieren können, werden Sie nicht zu viel wachsen, und möglicherweise nur dann Standard-Thread-Monitore in .NET verwenden, um Ihre eigenen Kometen Event Dispatching Sache zu bauen.

Allerdings NET-Anwendungen laufen neueren Versionen von IIS haben einen Strahl der Hoffnung though. Sie können eine benutzerdefinierte IAsyncHttpHandler erstellen. Es gibt einige große Führer für Sie online auf, wie das funktioniert nachlesen. Damit Sie Ihren eigenen Connection-Pool aufbauen können und servieren Sie Ihre Kunden effizienter. Es ist keine perfekte Lösung, und Sie haben zu viel Sanitär auf eigene Faust bauen aus. WebSync ist ein kommerzielles Produkt, das diese Schnittstelle für Sie wickelt und gibt Ihnen einige hohe Rahmen Stücke, die Sie arbeiten können mit jedoch.

Andere Tipps

WebSync wäre eine gute Lösung für Sie sein; es läuft auf IIS, so dass keine externen Prozesse benötigt werden. Check it out hier .

Sie können es auf eigene Faust implementieren, lange Pooling. 25 simultanious Anfragen sollten kein Problem für IIS sein. Werfen Sie einen Blick, was APE zu dem Kunden-Streams -. es ist ziemlich sauber, wie das dem Code (ich meine Serialisierung im kompatibelen Format) in 100 Zeilen neu zu implementieren

Haben Sie sich unter PubNub ? Es könnte in der Lage sein zu handhaben, was Sie tun. Es kostet Geld, aber Sie eine Reihe von Transaktionen, zu bekommen. Nicht sicher, welche Art von Last, die Sie erwarten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top