Передача сообщений клиентам из серверного приложения?

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

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

6
задан Achilles 5 August 2010 в 13:24
поделиться

5 ответов

Прежде всего, лучше всего использовать опрос. Вы можете сделать это с помощью Flash, Silverlight или Comet - http://en.wikipedia.org/wiki/Comet_ (программирование) , которые могут держать TCP-соединение открытым для вас для уведомлений. Сама веб-страница не может удерживать сокет открытым, поэтому нет возможности напрямую уведомить веб-клиента.

[Edit] Но подумайте, сколько клиентов могут одновременно поддерживать TCP-соединение с одним сервером? Для более крупной системы у вас довольно быстро закончились бы доступные сокеты, так как доступно 65k портов.
Сколько одновременных подключений может обрабатывать ваш сервер, зависит от ваших аппаратных ресурсов. Если у вас достаточно памяти и процессора, вы сможете обрабатывать ~ 100 КБ и, возможно, больше.Но если каждый запрос обращается к базе данных или какому-либо другому ресурсу через tcp / ip, вы можете быть ограничены количеством портов на каждый IP-адрес (65 КБ). Вы также должны направлять push-запросы к отдельному домену, поскольку браузер обычно ограничивает два одновременных подключения на домен, поэтому вы не будете мешать нормальной загрузке страницы.

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

7
ответ дан 8 December 2019 в 18:29
поделиться

Вам следует изучить КОМЕТУ .

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

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

2
ответ дан 8 December 2019 в 18:29
поделиться

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

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

1
ответ дан 8 December 2019 в 18:29
поделиться

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

2
ответ дан 8 December 2019 в 18:29
поделиться

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

1
ответ дан 8 December 2019 в 18:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: