Передача сообщений клиентам из серверного приложения? - PullRequest
6 голосов
/ 04 августа 2010

У меня есть клиент на основе javascript, который в настоящее время опрашивает веб-сервис .NET на предмет нового контента.Хотя опрос работает ... Я не доволен этим подходом, потому что я использую системные ресурсы и создаю накладные расходы, когда нет никаких изменений для получения.

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

Ответы [ 5 ]

7 голосов
/ 04 августа 2010

Прежде всего, опрос - это путь.Вы можете сделать это с помощью Flash, Silverlight или Comet - http://en.wikipedia.org/wiki/Comet_(programming), которые могут держать TCP-соединение открытым для уведомлений. Веб-страница сама по себе не может держать сокет открытым, поэтому нет способа напрямую уведомить веб-клиента.Сколько клиентов может одновременно хранить TCP-соединение с одним сервером?Для более крупной системы вам достаточно быстро исчерпают доступные сокеты, поскольку доступно 65 тыс. Портов. Сколько одновременных соединений может обрабатывать ваш сервер, зависит от ваших аппаратных ресурсов.Если у вас достаточно памяти и процессора, вы сможете обрабатывать ~ 100 Кб, а может и больше.Но если каждый запрос обращается к базе данных или другому ресурсу через tcp / ip, вы можете ограничиться количеством доступных портов на ip (65 КБ).Также необходимо, чтобы push-запросы шли к отдельному домену, поскольку браузер обычно ограничивает два одновременных подключения на домен, чтобы не мешать нормальной загрузке страницы.

Использование опроса в сочетании с серверами кешавпереди хорошее решение.На сервере может быть логика, которая обновляет кэш для каждого клиента, снижая нагрузку для каждого опроса.Вы можете обновить кэш для пользователей, которые выполнили вход / опрос в течение X минут, чтобы еще больше сократить обновление кеша.И для меня реализация тянуть проще, чем тянуть, мудро с технологией.

2 голосов
/ 06 августа 2010

Проверьте WebSync , кометное решение для .NET / IIS. Он будет делать именно то, что вы ищете. Не тратите лишних ресурсов на опрос, нажимайте только при необходимости, обновления в режиме реального времени ... целые 9 ярдов.

2 голосов
/ 04 августа 2010

Вы должны исследовать около COMET .

COMET - это метод, позволяющий серверу передавать данные в клиентские браузеры через открытую линию связи HTTP.

Вероятно, есть и другие примеры веб-сервисов COMET + WCF.

1 голос
/ 04 августа 2010

Вам уже сообщили о HTTP-опросе (COMET).Это оставляет открытым вопрос, как сам http сервер (IIS + ASP) обнаруживает изменения в базе данных без опроса базы данных.В SQL Server вы можете использовать технологию, такую ​​как Query Notifications , которая позволяет вашему процессу ASP.Net получать уведомления, когда происходит изменение в базе данных записи, которую он кэшировал.Вы также можете проверить проект LinqToCache , который позволяет смешивать уведомления о запросах с запросами LINQ.

1 голос
/ 04 августа 2010

http://www.ape -project.org / Я думаю, это хорошее место для вас, чтобы посмотреть. Он основан на толчке AJAX или, как некоторые называют это обратным AJAX. Есть и другие проекты, основанные на: http://en.wikipedia.org/wiki/Comet_(programming)

Я упомянул проект ape, потому что вы можете использовать JavaScript с ним или, если вы хотите C ++, PHP, Python и т. Д. На стороне сервера. : -)

...