Реализация кометы для ASP.NET?

Я искал способы реализации gmail-подобных сообщений внутри браузера и пришел к концепции Comet. Однако мне не удалось найти хорошую реализацию.NET, которая позволяла бы мне делать это в IIS (наше приложение написано на ASP.NET 2.0).

Решения, которые я нашел (или мог придумать, в этом отношении), требуют оставить работающий поток на пользователя - чтобы он мог вернуть ему ответ, как только он получит сообщение. Это не масштабируется, конечно.

Поэтому мой вопрос - знаете ли вы о реализации ASP.NET для Comet, которая работает по-другому? Это возможно даже с IIS?

8 ответов

Решение

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

WebSync - это совместимый со стандартами масштабируемый сервер Comet, который интегрируется непосредственно в конвейер IIS/.NET. Он также доступен по запросу в качестве хост-сервиса.

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

Он включает в себя поддержку на стороне клиента JavaScript, .NET/Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime и.NET Compact, а также поддержку на стороне сервера.NET / Mono и PHP.

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

Отказ от ответственности: я работаю в компании, которая разрабатывает этот продукт.

Недавно я написал простой пример сервера длинных опросов с использованием асинхронных контроллеров MVC 3, основанный на замечательной статье Клея Ленхарта.

Вы можете использовать пример развертывания AppHarbor, который я настроил на основе источника из проекта BitBucket.

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

На самом деле существует множество вариантов создания веб-сайтов, поддерживаемых ajax, с ASP.NET, но, честно говоря, PokeIn - самый простой способ создания веб-приложений, поддерживаемых ajax. Это спасло один из проектов моей компании.

Вы также можете взглянуть на шлюз Kaazing Enterprise Gateway, который выпустил производственную версию своего шлюза webSocket [HTML5], который полностью заменяет кометный путь и обеспечивает полнодуплексные соединения между браузерами и серверами приложений.

Вы также можете посмотреть на Light Streamer Demos

Я когда-то давно пользовался сайтом чата, который использовал специальный HTTP-сервер потоковой передачи. Я на самом деле воспроизвел это программное обеспечение в один момент из чистого любопытства, и я думаю, что это достаточно легко сделать. Я бы никогда не попытался реализовать подобный тип "бесконечного запроса" в IIS, особенно в ASP.NET, потому что запросы связывают поток пула потоков (или поток ввода-вывода, если используются асинхронные обработчики) бесконечно, что означает, что вы можете только обрабатывать столько на сервер, сколько позволяет конфигурация пула потоков.

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

Я знаю, что это на самом деле не отвечает на ваш вопрос, но я подумал, что вклад может быть актуальным.

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

Если повезет, есть также реализация Javascript.

Существует также реализация Silverlight, которая использует HTTP Duplex. Вы можете подключить javascript к объекту Silverlight, чтобы получать обратные вызовы, когда происходит push.

Есть также коммерческие платные версии.

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

Другие вопросы по тегам