Передача данных с сервера в браузер через http - PullRequest
4 голосов
/ 23 декабря 2009

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

// the function to check new messages in server
function check(){

  // but this question is less about jQuery.
  $.ajax({
    type: "POST",
    url: "check.aspx",
    data: "someparam=123",
    success: function(msg){

       // process msg here

       // CHECK IT AGAIN, but sometimes we need to make delay here
       check();
    }
  });
}

Затем я прочитал блог Николаса Аллена о том, как держать соединения открытыми в IIS .

Это заставляет меня задуматься, возможно ли передать данные с моего сервера в браузер клиента путем передачи фрагментированного HTTP (это означает, что потоковая передача, верно?) И держать соединение открытым .

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

while(connectionStillOpen) {
    // any new message?
    if( AnyMessage() )
    {
       // send chunked data, can I?
       SendMessageToBrowser();
       // may be we need to make delay here
       Sleep(forSomeTime);
    }
}

это грубая идея.

Приложение My Chat создано на ASP.net. С моим меньшим пониманием WCF и продвинутого модуля потоковой передачи IIS мне нужен ваш совет по поводу реализации этой идеи.

да, Невозможно , вероятно, ответ. Но мне нужно знать почему, если это все еще невозможно.

ОБНОВЛЕНИЕ (3 года спустя):

Это именно то, что я искал: Microsoft ASP.NET SignalR

Ответы [ 5 ]

2 голосов
/ 23 декабря 2009

Сервер не может инициировать связь с клиентом. Таким образом, сервер не может передать данные клиенту. Но вы можете добиться толкающего механизма, используя «Reverse AJAX». Следующая статья должна пролить больше света.

Обратный AJAX

2 голосов
/ 23 декабря 2009

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

Но вы можете проверять сервер на наличие новых сообщений каждые, скажем, 3 секунды и обновлять интерфейс вашего клиента.

Может быть, вы хотите взглянуть на некоторые реализации Comet

0 голосов
/ 23 декабря 2009

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

Ничего, кроме долгоживущего AJAX звонит и ответит клиенту если происходит ожидаемое событие на стороне сервера, в противном случае он остается спокойный. Это комета (программирование) статья в википедии объясняет больше о подход

Я ответил на аналогичный вопрос здесь asp-net-chat-with-wcf . Просьба проверить

0 голосов
/ 23 декабря 2009

Текущее поколение библиотек JavaScript / Ajax не предоставляет доступ к частичным ответам; вы получите уведомление только тогда, когда весь запрос будет выполнен.

Если вы открыты для использования Silverlight, вы можете использовать необработанное TCP-соединение.

Комета - это еще один вариант, но это в основном просто длинный опрос, который все еще происходит из клиентского скрипта.

0 голосов
/ 23 декабря 2009

Существует один метод, который называется Reverse AJAX. С помощью какого сервера можно передавать данные клиенту без какого-либо запроса от клиента.

...