C# 如何在使用长轮询时检测客户端是否订阅接收基于推送的通知
假设您的服务器和客户端使用ajax递归订阅通知,存在长时间轮询情况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 }); } 在服务器端,是否有可靠的方法来
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))));