【问题标题】:How to detect if a client is subscribed to receive push-based notifications when using long polling使用长轮询时如何检测客户端是否订阅接收基于推送的通知
【发布时间】:2011-10-25 18:07:44
【问题描述】:

假设您有一个服务器和客户端使用 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))));  

【问题讨论】:

  • 你能把你剩下的using (var server = new HttpServer("http://localhost:1234/"))代码贴出来吗?那里有一点代码味道,我想看看大局是什么。
  • @Enigmativity,完整代码在我发布的链接中。

标签: c# javascript system.reactive long-polling offlineapps


【解决方案1】:

在服务器端,有没有可靠的方法来检测是否 客户端实际上是用来接收请求的——换句话说, 有人打开了页面并准备好接收推送的数据?

我认为可靠的方法是等待客户端从服务器请求通知。

客户端请求需要有一个唯一的客户端 ID,服务器为成功订阅的客户端存储该 ID。如果 id 在那里,那么就给他他想要的。

您如何处理客户可能离线但需要 收到他们在重新登录时错过的数据?

客户端会离线多长时间以及多久创建一次新通知?如果客户离线时间过长,到时候她会收到很多通知。

或者你的意思是客户订阅然后失去她的互联网连接。然后,每个客户端都需要一个队列,在客户端请求通知之前,通知会保留在该队列中。当客户端保持离线时,消息留在队列中。如果客户端离线时间过长,您可能需要一段衰减时间才能清除队列中的消息,这样存储空间就不会变大(假设您将使用 redis 或类似的东西)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2021-10-16
    • 2013-09-07
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多