Ich habe eine Anwendung in MVC 3 und ich möchte WebSockets (mit Fallback zu Comet) hinzufügen.
Ich habe ein bisschen recherchiert und herausgefunden, dass der Comet-Teil ziemlich einfach ist und ich würde es lieber selbst machen. Nur AsyncControllers und ein ziemlich einfaches bisschen js ist alles, was benötigt wird, um diese langlebigen Ajax-Anfragen zu behandeln.
Jetzt, im Fall von WebSocket, beginnen die Dinge schmutzig zu werden. Ich habe mir ein paar Bibliotheken angeschaut, aber meistens scheinen sie einen Webserver einzurichten (sie benötigen also einen anderen Host oder einen eigenen Port) und hören dort ws-Protokollanfragen. Dies ist zum Beispiel der Fall für SuperWebSocket , was zuerst nett erschien, aber dieses Problem mit "Ich bin ein Webserver" hatte (was ist vollkommen in Ordnung natürlich, aber ich würde es eher vermeiden).
Dann habe ich "PingIt" oder so ähnlich angeschaut, ich kann den Link jetzt nicht finden ..., aber ich habe die Quelle auf einem anderen Computer. Dieser wird auf einem Endpunkt in mvc ausgeführt, aber mir gefiel die Art und Weise, wie er Dinge handhabt, wie ein IDisposable-Objekt, und durch Reflector wird ein Javascript-Stück erstellt, das im sehr verschmutzten Client gerendert wird mit dem Namen ihrer Bibliothek, an der ich wirklich kein Interesse habe, und es fühlte sich an, als würde eine Menge davon gegen etwas geworfen werden, was ich mir wünschen würde, was meiner Ansicht, wie eine Seite gerendert werden sollte (gerade jetzt dass ich an MVC arbeite, was ziemlich gut bedeutet, dass ich saubere, unaufdringliche HTML-Seiten schreiben kann.
Grundsätzlich möchte ich, dass meine Endpunkte etwa so aussehen:
domain.com/rt/comet
domain.com/rt/socket
statt
domain.com/rt/comet
domain.com:81 /
Also: Ist es möglich, Websocket-Verbindungen (und Handshake und was immer zu tun ist) an einem Endpunkt innerhalb eines Controllers der asp.net MVC-Anwendung zu empfangen, anstatt irgendwo einen tcplistener einzurichten?
Dies würde mir auch helfen, meinen Comet-Code ein wenig näher an meinem Websocket-Code zu halten
Ich sollte sagen, ich bin ernsthaft mit dem ganzen Kometen / Webstoks-Ding neu, also weiß ich nicht viel (oder irgendwas) von dem Protokoll, ich verstehe, wie man Kometenarbeit macht, aber nicht so sehr in Webstoks obwohl ich die Grundlagen gelesen und verstanden habe, um den Kern davon zu verstehen.
Auch: Bitte lassen Sie mich wissen, wenn das, was ich frage, weit weg ist
Als Referenz für diesen Thread auf WebSockets - ich möchte Sie darauf hinweisen, dass WebSockets auf den ersten Blick die offensichtliche Wahl ist. Die API bietet einen bidirektionalen Kommunikationskanal zwischen Browser und Server über einen einzigen TCP-Socket. Es wurde von der IETF standardisiert und die neuesten Browser Chrome, Firefox, IE und Opera unterstützen WebSockets. Es wurde entwickelt, um den Overhead der Bandbreite zu reduzieren, indem der HTTP-Nachrichten-Overhead reduziert wird. Also, was ist nicht zu mögen?
Wie bei jeder wahrgenommenen Silberkugel sind die Dinge nicht immer so, wie sie scheinen. Es gibt viele Probleme:
Browser-Unterstützung: Ab Juni 2012 unterstützen nur 47,64% der derzeit verwendeten Browser WebSockets Ссылка - Das bedeutet, egal wie gut WebSockets erscheinen, Sie brauchen immer noch eine zweite "Fallback" -Lösung, um die Mehrheit der Internetnutzer zu unterstützen. Und da die meisten "Fallback" -Lösungen Flash beinhalten, haben Sie immer noch kein Glück auf iOS und anderen mobilen Geräten.
Lesen Sie in diesem Blogbeitrag mehr über WebSockets in der Realität: Sind HTML5 WebSockets Gateway und Server das Allheilmittel für Echtzeitdaten-Push
Browser-Support-Update: Ab Juli 2017 unterstützen 93,85% derzeit verwendete Browser tatsächlich WebSockets Ссылка
Ich habe ein bisschen recherchiert und herausgefunden, dass der Comet-Teil ziemlich einfach ist und ich würde es lieber selbst machen. Nur AsyncControllers und ein ziemlich einfaches bisschen js ist alles, was benötigt wird, um diese langlebigen Ajax-Anfragen zu behandeln.
Tut mir leid, es ist nicht so einfach. Unterschiedliche Browser verhalten sich auf unterschiedliche Art und Weise und arbeiten mit verschiedenen Techniken besser - XMLHttpRequest, XDomainRequest, ActiveX-Objekte, Multpart Replace, Long-Polling, Streaming. Aus diesem Grund und der Tatsache, dass es keine definierte Spezifikation für diese Lösungen gibt, Comet ist nur ein Hack . Server Sent Events (EventSource API) und WebSockets wurden von Grund auf so konzipiert, dass sie die effizienteste und standardisierte Art der Übertragung von Daten vom Server zum Client bieten, und viel wichtiger ist, dass WebSockets für die bidirektionale Echtzeitkommunikation zwischen Clients entwickelt wurden und ein Server.
Jetzt, im Fall von WebSocket, beginnen die Dinge schmutzig zu werden. Ich habe mir ein paar Bibliotheken angeschaut, aber meistens scheinen sie einen Webserver einzurichten (der daher einen anderen Host oder einen anderen Port benötigt) und dort ws-Protokollanfragen zu hören. Dies ist zum Beispiel bei SuperWebSocket der Fall, was zunächst nett erschien, aber dieses "Ich bin ein Webserver" Problem (was vollkommen in Ordnung ist, aber ich würde es lieber vermeiden).
Windows Server 8 unterstützt native WebSockets. Bis dahin müssen Sie einen separaten 'Webserver' verwenden, wie zB XSockets oder SuperWebSockets (auf die Sie bereits verwiesen haben). Es gibt auch Alchemy WebSockets und Fleck .
Aber weil Microsoft SignalR vorantreibt, ist es am wahrscheinlichsten, dass er volle Traktion bekommt und sogar Teil des Standard-ASP wird. NET MVC-Stack (es ist vielleicht schon geplant, ich bin ein wenig hinter der Zeit mit MS-Zeug). SignalR hat WebSocket-Unterstützung (oder hat ein Modul) und wird Fallbacks zu Transportmechanismen handhaben, die den Browser des Benutzers unterstützen.
Weitere Informationen zu selbst gehosteten Lösungen (es gibt einige weitere .NET / IIS-Optionen) finden Sie in diesen selbst gehostete Echtzeit-Dienste .
Ich bin sehr daran interessiert zu sehen, wie IIS im Umgang mit Tausenden von persistenten Verbindungen skaliert - wurde es für Windows Server 8 neu geschrieben? Wie lange dauert es, bis Sie einen Load Balancer und eine horizontale Skalierung einführen müssen? Wenn das nicht etwas ist worüber Sie sich Sorgen machen müssen, dann würde ich mir ein Hosting anschauen Echtzeit-Service .
Tags und Links asp.net-mvc-3 c# iis websocket comet