Как определить, подписан ли клиент на получение push-уведомлений при использовании длинного опроса - PullRequest
0 голосов
/ 25 октября 2011

Скажем, у вас длительная ситуация с сервером и клиентом, который подписывается на уведомления с использованием рекурсивного ajax,

var subscribe = function () {
$.get('http://localhost:1234', function (data) {
 // use the data                                
 subscribe(); // send another request
                });
            }

На стороне сервера, существует ли надежный способ определить, действительно ли клиент находится там для получения запросов - другими словами, что кто-то открыл страницу и готов к приему отправленных данных? Как вы справляетесь с тем фактом, что клиенты могут находиться в автономном режиме, но им необходимо получать пропущенные данные при повторном входе в систему?

В настоящее время я внедряю сервер с использованием реактивных расширений для .NET по следующей ссылке:

http://joseoncode.com/2011/06/17/event-driven-http-server-in-c-with-rx-and-httplistener/

 using (var server = new HttpServer("http://localhost:1234/"))
        {
            //the listeners stream and subscription
            var listeners = server
                    .Where(ctx => ctx.Request.HttpMethod == "GET")
                     //wait the next message to end the request
                    .Subscribe(ctx => subject.Take(1)                                                  .Subscribe(m => ctx.Respond(new StringResponse(m))));  

1 Ответ

1 голос
/ 26 октября 2011

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

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

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

Как вы справляетесь с тем фактом, что клиенты могут быть в автономном режиме, но должны получить данные, которые они пропустили при входе в систему?

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

Или, может быть, вы имеете в виду, что клиент подписывается, а затем теряет свое интернет-соединение. Тогда каждому клиенту потребуется очередь, в которой остаются уведомления, прежде чем клиент запросит их. Пока клиент остается в автономном режиме, сообщения остаются в очереди. Вероятно, вам потребуется время затухания для очистки сообщений в очереди, если клиент слишком долго остается в автономном режиме, поэтому объем хранилища не увеличивается (при условии, что вы будете использовать redis или что-то подобное).

...