C# 如何在使用长轮询时检测客户端是否订阅接收基于推送的通知

C# 如何在使用长轮询时检测客户端是否订阅接收基于推送的通知,c#,javascript,system.reactive,long-polling,offlineapps,C#,Javascript,System.reactive,Long Polling,Offlineapps,假设您的服务器和客户端使用ajax递归订阅通知,存在长时间轮询情况 var subscribe = function () { $.get('http://localhost:1234', function (data) { // use the data subscribe(); // send another request }); } 在服务器端,是否有可靠的方法来

假设您的服务器和客户端使用ajax递归订阅通知,存在长时间轮询情况

var subscribe = function () {
$.get('http://localhost:1234', function (data) {
 // use the data                                
 subscribe(); // send another request
                });
            }
在服务器端,是否有可靠的方法来检测客户端是否真的在那里接收请求——换句话说,有人打开了页面并准备接收推送的数据?您如何处理客户端可能处于脱机状态,但在重新登录时需要接收丢失的数据这一事实

我目前正在基于以下链接使用.NET的反应式扩展来实现服务器

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

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

客户机请求需要具有唯一的客户机id,服务器为成功订阅的客户机存储该id。如果有身份证,就给他想要的

您如何处理客户端可能处于脱机状态但需要 是否接收他们重新登录时丢失的数据

客户端将保持脱机状态多长时间?新通知多久创建一次?若客户离线时间过长,那个么到那个时她将收到大量通知


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

您可以使用(var server=new HttpServer(“)http://localhost:1234/)请输入代码?这里有一点代码的味道,我想看看更大的图景是什么。@Enigmativity,完整的代码在我发布的链接上。
 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))));