Implementacja komety dla ASP.NET? [Zamknięte]


103

Szukałem sposobów zaimplementowania wiadomości przypominających Gmaila w przeglądarce i doszedłem do koncepcji Comet . Jednak nie udało mi się znaleźć dobrej implementacji .NET, która pozwoliłaby mi to zrobić w IIS (nasza aplikacja jest napisana w ASP.NET 2.0).

Rozwiązania, które znalazłem (lub mogłem wymyślić, jeśli o to chodzi) wymagają pozostawienia działającego wątku na użytkownika - tak, aby mógł zwrócić mu odpowiedź, gdy otrzyma wiadomość. To oczywiście wcale się nie skaluje.

Moje pytanie brzmi - czy znasz implementację ASP.NET dla Comet, która działa w inny sposób? Czy jest to w ogóle możliwe w przypadku usług IIS?


12
Wydaje mi się, że początkową, błogosławioną przez MS implementacją jest SignalR: hanselman.com/blog/…
user423430

Node.JS jest teraz obsługiwany na platformie Azure, wkrótce będą obsługiwane usługi IIS w wersji 2003. Oznacza to, że będziemy mogli uruchomić serwer comet w ramach IIS ( windowsazure.com/en-us/develop/nodejs )
goodguys_activate

Odpowiedzi:


44

Skalowanie komety za pomocą usług IIS jest trudne ze względu na stałą łączność komety, ale jest zespół, który analizuje teraz scenariusze dotyczące komety. Spójrz także na blog Aarona Lercha, ponieważ wydaje mi się, że wykonał on kilka wczesnych prac nad kometą w ASP.NET.


9
To jest faktycznie realizowane; sprawdź WebSync, zgodnie z odpowiedzią Antona poniżej. ( frozenmountain.com/websync )
jvenema

3
Czy ktoś nazywa odwrotnego Ajaxa? sprawdź to: pokein.codeplex.com
Zuuum

4
Kontrolery asynchroniczne MVC mogą pomóc w walce z problemami z usługami IIS, odciążając czekanie na wątki robocze spoza IIS, zobacz ten wspaniały post Claya Lenharta . Zobacz także przykładowy projekt serwera czatu w usłudze BitBucket.
Jacob

33

WebSync to zgodny ze standardami skalowalny serwer Comet, który integruje się bezpośrednio z potokiem IIS / .NET. Jest również dostępna na żądanie jako usługa hostowana.

Oficjalnie obsługuje do 20 000 równoczesnych połączeń klientów na węzeł serwera, ale w indywidualnych testach osiągnięto nawet 50 000. Przepustowość wiadomości jest optymalna w okolicach 1 000-5 000 współbieżnych klientów, przy czym komunikaty są dostarczane z prędkością do 300 000 na sekundę z pojedynczego węzła.

Obejmuje obsługę po stronie klienta dla JavaScript, .NET / Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime i .NET Compact, z obsługą po stronie serwera dla .NET / Mono i PHP.

Klastrowanie jest obsługiwane przy użyciu programu SQL Server lub Azure Caching po wyjęciu z pudełka, ale niestandardowych dostawców można napisać dla prawie wszystkiego (Redis, NCache).

Zastrzeżenie: Pracuję dla firmy, która opracowuje ten produkt.


17
powinno być tutaj zastrzeżenie, ponieważ jest to twój produkt ...
Sam Saffron

9
Jasne, jest wyprodukowany przez firmę, dla której pracuję :) Zdecydowanie nie próbuję niczego ukrywać.
Anton

1
@Anton - nie ukrywanie czegoś to nie to samo, co ujawnianie.
RedFilter

1
@Anton Czy możesz bardziej szczegółowo opisać, w jaki sposób obsługuje do 20 000 jednoczesnych połączeń klientów na węzeł serwera? Te liczby wyglądają, no cóż… „za duże”.
Pacerier,

1
Nie sądzę, aby rozsądnie byłoby zapytać, jak działa websync pod maską, koncepcyjnie - oczywiście z widoku 25 000 stóp.
nocarrier

15

Niedawno napisałem prosty przykład serwera Long Polling Chat używającego kontrolerów asynchronicznych MVC 3 w oparciu o świetny artykuł Claya Lenharta

Możesz użyć przykładu we wdrożeniu AppHarbor, które skonfigurowałem na podstawie źródła z projektu BitBucket.

Więcej informacji dostępnych w moim wpisie na blogu wyjaśniającym projekt .


Podoba mi się przykład na wdrożeniu
AppHarbor

„post na blogu wyjaśniający projekt” -> web.archive.org/web/20130328042214/http://…
jaybro

Dzięki! Cieszę się, że podobał Ci się ten artykuł.
Clay Lenhart

4

W rzeczywistości istnieje wiele możliwości stworzenia strony internetowej obsługiwanej przez Ajax z ASP.NET, ale szczerze mówiąc, PokeIn jest najłatwiejszym sposobem na stworzenie aplikacji internetowej obsługującej kometę Ajax . Uratował jeden z projektów mojej firmy.



1

Dawno temu korzystałem z witryny czatu, która korzystała z niestandardowego serwera strumieniowego HTTP. W pewnym momencie odtworzyłem to oprogramowanie z czystej ciekawości i myślę, że jest to dość łatwe. Nigdy nie próbowałbym zaimplementować podobnego typu „nieskończonego żądania” w IIS, szczególnie w ASP.NET, ponieważ żądania wiążą wątek puli wątków (lub wątek IO, jeśli są używane asynchroniczne programy obsługi) w nieskończoność, co oznacza, że ​​możesz tylko obsłużyć tyle na serwer, na ile pozwala na to konfiguracja puli wątków.

Gdybym miał silną uzasadnioną potrzebę takiej funkcjonalności, szczerze napisałbym dla niej niestandardowy serwer http.

Wiem, że to tak naprawdę nie odpowiada na twoje pytanie, ale pomyślałem, że dane wejściowe mogą być istotne.


1

Grupa WS-I opublikowała coś o nazwie „Niezawodny bezpieczny profil”, które ma implementację Glass Fish i .NET, które najwyraźniej dobrze ze sobą współpracują .

Przy odrobinie szczęścia istnieje również implementacja Javascript .

Istnieje również implementacja Silverlight korzystająca z protokołu HTTP Duplex. Możesz połączyć javascript z obiektem Silverlight, aby uzyskać wywołania zwrotne w przypadku wypychania.

Istnieją również płatne wersje komercyjne .


4
Wysyłanie zbiorcze dokładnie tej samej odpowiedzi na kilka pytań w krótkich odstępach czasu zwykle powoduje wyświetlenie kilku flag ...
Marc Gravell

2
( psst )

0

Myślę, że podejście Comet nie jest naprawdę skalowalne, chyba że jesteś przygotowany na poziome rozszerzenie farmy internetowej (przez dodanie większej liczby serwerów internetowych do mieszanki). Sposób działania polega na tym, że pozostawia otwarte połączenie TCP na sesję użytkownika, aby serwer mógł od czasu do czasu przesyłać rzeczy do tego połączenia, aby natychmiast poinformować użytkownika o zmianie lub działaniu.


6
Wszystko jest skalowalne tylko w pionie do punktu, po którym musi nastąpić skalowanie w poziomie.
Anton
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.