随着Web应用程序的普及和发展,越来越多的网站开始采用服务器推送技术来主动地向客户端发送消息。服务器推送技术在如今的互联网应用领域中已经变得相当流行,其应用范围也越来越广泛。在ASP网站中实现服务器推送技术,可以提高网站交互性,优化用户体验,增强网站的实时性、可靠性和可扩展性。本文将介绍如何在ASP网站中实现服务器推送消息。
一、什么是服务器推送技术
服务器推送技术是指服务器向客户端主动推送消息的一种技术。与传统的客户端轮询方式不同,服务器推送技术不需要客户端主动发起请求,而是通过服务器向客户端发送消息来实现信息的实时推送。服务器推送技术可以实现多种实时应用场景,如在线聊天室、股票行情、实时数据监控等。
二、基于Ajax的服务器推送技术实现
基于Ajax的服务器推送技术实现,是目前应用比较广泛的一种推送技术,其主要原理是通过客户端向服务器发送一个长连接请求,服务器端返回一个标志性的响应,等到有异步消息时再把数据推送给客户端。
1、服务器端代码实现
在服务器端,我们需要利用.NET框架提供的Httpapplication对象的Application_BeginRequest事件,用来接收并处理Ajax请求。具体代码如下:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
var request = HttpContext.Current.Request;
//判断请求类型是否为“long-polling”,以确定站点的访问类型
if (request.Headers[“X-Requested-With”] == “XMLHttpRequest” &&
request.Headers[“Access-Control-Request-Method”] == “POST”)
{
var response = HttpContext.Current.Response;
//发送响应消息
response.Flush();
//长轮询时间设置
this.SuspendRequest(request);
}
}
在代码中,我们使用了Application_BeginRequest事件来接收Ajax请求,并对请求进行筛选。在将请求转发给后台处理前,我们需要判断该请求是否为长轮询请求,以此来确定站点的访问类型。
2、客户端代码实现
在客户端,我们通过JavaScript来实现长轮询。具体代码如下:
function startLongPoll(){
hasAjaxRequest = true;
$.ajax({
type: “POST”,
url: “serverURL”,
contentType: “application/json;charset=utf-8”,
timeout: 20230,
complete: function(jqXHR, textStatus){
hasAjaxRequest = false;
if(textStatus == “timeout”){
startLongPoll();
}
else if(textStatus == “success”){
var data = $.parseON(jqXHR.responseText);
//处理推送消息
//…
startLongPoll();
}
}
});
}
在以上代码中,我们通过递归调用startLongPoll函数来实现长轮询,通过控制请求的timeout属性来控制客户端请求的超时时间。
三、WebSocket推送技术实现
WebSocket是一种全双工通信协议,可以在客户端和服务器之间建立稳定的长连接,实现双向通信。连接建立后,WebSocket通道会保持开放状态,并保持数据交换。WebSocket推送技术实现,可以实现弹幕、实时在线视频、实时股票行情等实时性应用场景。
1、服务器端代码实现
在服务器端,我们需要利用System.Net.WebSocket类提供的API来实现WebSocket服务端。具体代码如下:
public async Task ProcessRequest(HttpContext context)
{
if (context.IsWebSocketRequest)
{
using (WebSocket ws = awt context.WebSockets.AcceptWebSocketAsync())
{
//处理推送消息
while (ws.State == WebSocketState.Open)
{
var buffer = new ArraySegment(new byte[1024]);
var ret = awt ws.ReceiveAsync(buffer, CancellationToken.None);
}
}
}
else
{
context.Response.StatusCode = 400;
}
}
在以上代码中,我们首先使用IsWebSocketRequest属性来判断是否为WebSocket请求。另外,需要特别注意的是,WebSocket请求必须在HTTP中使用SSL/TSL协议进行通信,以确保数据传输的安全性。
2、客户端代码实现
在客户端,我们同样需要通过JavaScript来实现WebSocket推送。具体代码如下:
var ws = new WebSocket(“ws://serverURL”);
ws.onopen = function(evt) {
console.log(“Connection open …”);
};
ws.onmessage = function(evt) {
console.log( “Received Message: ” + evt.data);
};
ws.onclose = function(evt) {
console.log(“Connection closed.”);
};
需要注意的是,在使用WebSocket推送技术实现时,我们需要保证客户端浏览器支持WebSocket技术。如果浏览器不支持WebSocket技术,我们仍然可以通过Ajax轮询的方式来实现推送效果。
四、
相关问题拓展阅读:
- iOS远程推送点击消息跳转到指定页面
iOS远程推送点击消息跳转到指定页面
很多应用都会实现推送功能,我们可以集成第三方框架实现推送功能,
比如:JPush推送:
个推:
下面来说说收到推送消息的逻辑处理
一、收到推送消息有三种情况:
1、应用未启动(默认显示在通知栏,或者锁屏时显示在锁屏页面)
2、应用在后台挂起(默认显示在通知栏,或者锁屏时显示在锁屏页面)
3、应用在前台(默认不显示)
二、点击推送消息有两种情况:1、应用未启动 -> 启动这个时候如论是点击推送消息打开应用还是点击icon打开应用都会调用以下方法(具体的可以根据 userInfo 进行判断):(只有重新罩肢打开APP和后台杀死后在打开APP才会走下面的方法)
2、应用在后台 -> 应用在前台应用在后台挂起时点击推送消息和应用在前台时收到推送消息,都会调用以下方法:
ios 7 以上会调用下面这个方法
ios 10 会调用 下面的方法
应用在后台挂起时默认是不调用该方法的,如果你需要接收到推送消息还没点击推送就激袜调用该方法,可以让服务器发给APNS时在aps 字典中加入:
aps = {
content-available = 1;
}
首先根据APP的状态进行判断 这里当APP在前台显示的时候根据需求我们没有明闷激消息进行处理
之一步:发送通知
第二步:添加
观察者
第三步:进行页面的跳转,这地方有一个重点是如何获取的当前页面的然后才能够实现跳转
在此给View写了一个分类方法
第四步:实现跳转到目的controller
关于服务器推送消息给asp的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。