Реалізація комети для ASP.NET? [зачинено]


103

Я розглядав способи впровадження повідомлень, подібних до gmail, у веб-переглядачі та дійшов до концепції Комети . Однак мені не вдалося знайти хорошу реалізацію .NET, яка дозволяє мені це робити в IIS (наша програма написана в ASP.NET 2.0).

Я знайшов рішення (або з цього приводу міг би придумати) потребуючи залишити поточний потік для кожного користувача - щоб він міг повернути йому відповідь, як тільки він отримає повідомлення. Звичайно, це не масштабується.

Отже, моє запитання - чи знаєте ви про реалізацію ASP.NET для Comet, яка працює по-іншому? Це можливо навіть при IIS?


12
Я думаю, що початковою реалізацією для MS є SignalR: hanselman.com/blog/…
користувач423430

Node.JS зараз підтримується на Azure, незабаром буде підтримуватися IIS 2003 року. Це означає, що ми зможемо запустити комет-сервер у IIS ( windowsazure.com/en-us/develop/nodejs )
goodguys_activate

Відповіді:


44

Комета є складною для масштабування з IIS через постійну зв'язок комети, але зараз існує команда, яка розглядає сценарії комети. Також погляньте на блог Аарона Лерча, оскільки я вважаю, що він провів деяку роботу на кометі в ASP.NET.


9
Це реально реалізовано; перегляньте WebSync відповідно до відповіді Антона нижче. ( freedmountain.com/websync )
jvenema

3
Хтось називає зворотний аякс? перевірити це: pokein.codeplex.com
Zuuum

4
Контролери MVC Async можуть допомогти боротися з проблемами IIS, вивантаживши очікування на інші робочі потоки IIS, дивіться цей чудовий пост від Clay Lenhart . Також дивіться Приклад проекту проекту сервера чату на BitBucket.
Яків

33

WebSync - це сумісний зі стандартами масштабований сервер Comet, який інтегрується безпосередньо в конвеєр IIS / .NET. Він також доступний на вимогу як розміщена послуга.

Він офіційно підтримує до 20 000 одночасних клієнтських з'єднань на серверний вузол, але окремі тести показали, що це близько 50 000 Пропускна здатність повідомлень оптимальна приблизно від 1000 до 5000 одночасно клієнтів, при цьому повідомлення надсилаються до 300 000 в секунду з одного вузла.

Вона включає підтримку на стороні клієнта JavaScript, .NET / Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Runtime Windows та .NET Compact, з підтримкою .NET / Mono та PHP на стороні сервера.

Кластеризація підтримується за допомогою SQL Server або Azure Caching поза коробкою, але користувацькі провайдери можуть бути написані майже будь-що (Redis, NCache).

Відмова: Я працюю в компанії, яка розробляє цей продукт.


17
тут має бути відмова від відповідальності, як її продукт ...
Сем Шафрон

9
Звичайно, його виробляє компанія, над якою працюю :) Однозначно нічого не намагаюся приховати.
Антон

1
@Anton - не приховувати щось не те саме, що розкривати його.
RedFilter

1
@Anton Чи можете ви детальніше розповісти про те, як він підтримує до 20 к одночасних підключень клієнтів на серверний вузол? Ці цифри виглядають, ну .. "занадто великими".
Pacerier

1
Я не думаю, що було б доцільно запитати, як працює веб-синхронізація під кришкою, концептуально - з точки зору 25 000 футів.
nocarrier

15

Нещодавно я написав простий приклад довгого опитування сервера чату з використанням контролерів MVC 3 Async на основі чудової статті Клія Ленхарта

Ви можете використовувати приклад для розгортання я AppHarbor, який я створив на основі джерела проекту BitBucket.

Крім того, більше інформації, доступної в моєму блозі, що пояснює проект .


Мені подобається приклад розгортання
AppHarbor


Дякую! Радий, що вам сподобалась стаття.
Клей Ленхарт

4

Насправді існує багато варіантів для створення веб-сайту, що підтримується ajax, за допомогою ASP.NET, але, чесно кажучи, PokeIn - це найпростіший спосіб створити веб-додаток , котрий підтримує комета Аякс . Це врятувало один із проектів моєї компанії.


3

Ви також можете подивитися на шлюз Kaazing Enterprise, який здійснив випуск їх шлюзу webSocket [HTML5], який повністю витісняє кометний шлях та забезпечує повне дуплексне з'єднання між браузерами та серверами додатків.

Ви також можете подивитися на демонстрації Light Streamer


1

Я колись давно використовував веб-сайт для чату, який використовував вбудований на потоковий сервер http-сервер. Я фактично відтворив це програмне забезпечення в один момент з великої цікавості, і це зробити досить просто, я думаю. Я б ніколи не намагався реалізовувати подібний тип "нескінченного запиту" в IIS, особливо в ASP.NET, оскільки запити пов'язують нитку пулу потоків (або потік IO, якщо використовуються асинхронні обробники) безстроково, це означає, що ви можете лише обробляти стільки на сервері, скільки дозволяє конфігурація пулу потоків.

Якби у мене була гостра законна потреба у такому функціоналі, я б чесно написав для нього спеціальний http-сервер.

Я знаю, що насправді не відповідає на ваше запитання, але я вважав, що ця інформація може бути доречною.


1

Група WS-I опублікувала щось під назвою "Надійний безпечний профіль", який має реалізацію Glass Fish та .NET, яка, очевидно, добре взаємодіє .

При будь-якій удачі, є також реалізація Javascript .

Існує також реалізація Silverlight, яка використовує HTTP Duplex. Ви можете підключити javascript до об'єкта Silverlight, щоб отримувати зворотні дзвінки, коли відбувається натискання.

Також є комерційні платні версії .


4
Групова публікація такої самої відповіді на ряд запитань у короткій послідовності має тенденцію до
подолання

2
( psst )

0

Я думаю, що підхід Comet насправді не є масштабним, якщо ви не готові горизонтально розширювати веб-ферму (додаючи в суміш більше веб-серверів). Як це працює, це те, що він залишає відкритим TCP-з'єднання на кожен сеанс користувача, так що сервер час від часу може підштовхувати речі до цього з'єднання, щоб негайно повідомити користувача про зміну чи діяльність.


6
Все лише вертикально масштабується до точки, після чого має відбуватися горизонтальне масштабування.
Антон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.