Отправка уведомлений в JavaScript? - PullRequest
2 голосов
/ 10 июня 2010

Мне просто интересно, есть ли способ заставить сервер передавать информацию в функцию JavaScript. По сути, у меня есть страница типа Dashboard, которая имеет функцию javaScript для получения обновлений с сервера и обновления панели инструментов.

Я бы хотел, чтобы мой сервер мог "пинговать" JS.

Я даже не знаю, как это возможно (полагаю, Twitter и Facebook используют опрос?), Но я подумала, что задам вопрос.

Я слышал о Comet , но я не знаю, работает ли это с простой стандартной установкой IIS 7? (Это сайт SharePoint 2010, если это имеет какое-либо значение). Если я правильно понимаю, Comet - это, по сути, постоянно открытое соединение, поэтому кажется, что оно на самом деле противоположно тому, что я хочу (уменьшение количества запросов и, следовательно, нагрузки) *

Ответы [ 6 ]

3 голосов
/ 14 июня 2010

Если вы ищете кометный сервер для IIS, посмотрите WebSync ; это именно то:)

2 голосов
/ 24 января 2014

Как говорит Сэмюэль Нефф: «Вам понадобится открытое соединение для« передачи »данных с сервера на клиент».

Вы можете использовать такой сервис, как pubnub , чтобы открывать постоянные соединения с клиента и поддерживать резервные версии для старых браузеров.

Я сделал небольшую демонстрацию, чтобы показать вам, как может работать фронтенд этого приложения. Демонстрация показывает задержку PubNub с течением времени. Источник доступен здесь .

PubNub Latency Demo

Браузер подписывается на канал и запускает обратный вызов при получении сообщения.

 pubnub.subscribe({
     channel: 'my_channel',
     message: function(m){console.log(m)}
 });

В демоверсии клиент также публикует сообщения. В вашем случае вы бы включили библиотеку PubNub IIS .

pubnub.Subscribe<string>(channel="mychannel", DisplaySubscribeReturnMessage,    DisplaySubscribeConnectStatusMessage, DisplayErrorMessage);
// NOTE: DisplaySubscribeReturnMessage, DisplaySubscribeConnectStatusMessage and DisplayErrorMessage are callback methods
2 голосов
/ 10 июня 2010

Обход в стиле Comet - наиболее распространенный способ получить эту функциональность.Соединение не постоянно открыто, а дросселируется, чтобы совершать вызовы каждые x секунд, затем повторите попытку по истечении времени ожидания.Тайм-аут по сути означает, что серверу нечего было дать клиенту во время опроса.Вы увидите, что в коде Etherpad использовался тот же подход, который теперь интегрирован в другие продукты Google, такие как Google Docs и Wave.

2 голосов
/ 10 июня 2010

Истинно инициирование соединения с сервера невозможно при использовании HTTP.На самом деле Comet - это не единственная техника, а набор различных обходных путей (многие из которых описаны в статье, на которую вы ссылаетесь).

Для получения информации о методах кометы с IIS см. Предыдущий вопрос, Программирование кометы в IIS .Одна из обсуждаемых программ - WebSync.

1 голос
/ 10 июня 2010

Вам понадобится открытое соединение для «передачи» данных с сервера на клиент.Поэтому, даже если вы пошли по пути использования плагина, такого как Flash, для открытия сокетного соединения, которое поддерживает двустороннюю связь, у вас есть открытое сокетное соединение.

Ваше утверждение «уменьшение количества запросов и, следовательно, загрузки» действительно проблематично.Вы приравниваете количество запросов к нагрузке, и это не точно.С Comet большинство запросов ожидают данных.Поэтому у вас может быть очень большое количество запросов, но на самом деле очень низкая нагрузка на сервер - он вряд ли использует ресурсы, кроме ожидающего потока из пула рабочих потоков.Прекрасно работает, прост в реализации и делает именно то, что вам нужно.

1 голос
/ 10 июня 2010

Вы должны сделать это наоборот: клиент "пингует" сервер с помощью JS.

Вы можете сделать что-то вроде:функция, которую вы используете для вызова AJAX и которая вызывает onReturn, когда получает ответ.Получив ответ, он ожидает в этом случае 5 секунд и снова опрашивает сервер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...