• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > ASP.NET中ServerPush用法实例分析

ASP.NET中ServerPush用法实例分析

作者:IT金钟国 字体:[增加 减小] 来源:互联网 时间:2017-05-11

IT金钟国通过本文主要向大家介绍了c asp.net实例,用实例学asp.net,ajax实例 asp.net,asp.net,asp net培训等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了ASP.NET中ServerPush用法。分享给大家供大家参考。具体分析如下:

什么是ServerPush,服务器向客户端“推送“,其实就是”长连接“

只有浏览器请求服务器端,服务器端才给浏览器响应数据,不会主动向浏览器推送数据,这是一种安全考虑,也是提高服务器的性能考虑,如果服务器向浏览器主动推送数据,就要用到ServerPush等技术模拟实现。

举个例子:

通过两个页面互相发送消息实现,消息放到数据库。

/// <summary>
/// ServerPush1 的摘要说明
/// </summary>
public class ServerPush1 : IHttpHandler
{
  public void ProcessRequest(HttpContext context)
  {
   context.Response.ContentType = "application/json";
   string action = context.Request["action"];
   if (action == "send")//发送
   {
    string me = context.Request["me"];
    string toUserName = context.Request["toUserName"];
    string msg = context.Request["msg"];
    SQLHpler.ExecuteNonQuery("INSERT INTO T_Msgs(FromUserName,ToUserName,Msg) VALUES(@FromUserName,@ToUserName,@Msg)", new SqlParameter("@FromUserName", me),
     new SqlParameter("@ToUserName", toUserName),
     new SqlParameter("@Msg", msg));
    context.Response.Write(new JavaScriptSerializer().Serialize(new { Status = "ok" }));
   }
   else if (action == "receive")
   //登陆,并持续查询、接收对方发过来的数据
   {
    //做一个简单的例子,以ServerPush1.ashx?me=sean
    //请把发给sean的消息发给我一条
    string me = context.Request["me"];
    while (true)
    {
     DataTable dt = SQLHpler.ExecuteQuery("SELECT TOP 1 * FROM T_Msgs WHERE ToUserName=@ToUserName",new SqlParameter("@ToUserName", me));
     if (dt.Rows.Count <= 0)
     {
      Thread.Sleep(500);//没找到,休息500ms再查询,这样避免对数据库的查询压力,和占用WEB服务器CPU资源
      continue;//下一次while
     }
     else
     {
      DataRow row = dt.Rows[0];
      long id = (long)row["Id"];
      string fromUserName = (string)row["FromUserName"];
      string msg = (string)row["Msg"];
      //查询完之后要删除消息,否则会出现死循环,不停的给页面输出同一个消息
      SQLHpler.ExecuteNonQuery("DELETE FROM T_Msgs WHERE Id=@Id",new SqlParameter("@Id",id));
      //创建一个匿名对象,将查询到的数据存到里面
      var data = new { FromUserName = fromUserName, Msg = msg, Id = id };
      string json = new JavaScriptSerializer().Serialize(data);//将匿名对象转换为json
      context.Response.Write(json);//将请求结果以json格式返回
      break;
     }
    }
   }
   else
   {
    throw new Exception("action错误");
   }
}

</div>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
<script type="text/javascript">
var rev = function () {
 var mine = $('#me').val();
 $.ajax({
  type: 'post', url: 'serverPush1.ashx',
  data: { action: 'receive', me: mine },//传给serverPush.ashx根据me查找发给me的消息
  success: function (data) {
   $('#ulMsg').append($('<li>' + data.FromUserName + '对我说:' + data.Msg + '</li>'));
   rev();//收到消息后再向服务器请求数据,再给我一条消息
  },
  error: function () {
   rev();
   //哪怕网络请求失败(比如用户网络故障),也再次发送请求
  }
 });
};
$(function () {
 //发送
 $('#btnSend').click(function () {
  var myName = $('#me').val();
  var toUserName = $('#toUserName').val();
  var msg = $('#msgContext').val();
  $.ajax({
   type: 'post', url: 'serverPush1.ashx',
   data: { action: 'send', me: myName, toUserName: toUserName, msg: msg },//根据用户输入的信息,传到服务端ServerPush.ashx进行插入操作
   success: function (data) {
    if (data.Status == 'ok') {//如果发送成功,
     $('#ulMsg').append($('<li>我对' + toUserName + '说:' + msg + '</li>'));
     $('#msgContext').val('');
    }
    else {
     alert('发送出错,返回报文无法识别');
    }
   },
   error: function () {
    alert('发送出错');
   }
  });
 });
 //登陆,接收数据
 $('#btnLogin').click(function () {
  rev();
  $(this).attr("disabled", "disabled");
 });
 /*
 $('#btnLogin').click(function () {//接收
  var mine = $('#me').val();
  $.ajax({
   type: 'post', url: 'serverPush1.ashx',
   data: { action: 'receive', me: mine },
   //传给serverPush.ashx根据me查找发给me的消息
   success: function (data) {
    $('#ulMsg').append($('<li>' + data.toUserName + '对我说:' + data.msg + '</li>'));
   },
   error: function () {
    alert('接收失败');
   }
  });
 });*/
});
</script>
</head>
<body>
 发送人:<input type="text" id="me" /><input type="button" id="btnLogin" value="登陆" style=""/><br />
 接收人:<input type="text" id="toUserName" /><br />
 输入消息:<input type="text" id="msgContext" /><input type="button" id="btnSend" value="发送" /><br />
 聊天记录:<br />
 <ul id="ulMsg">
 </ul>
</body>
</html>
</div>

希望本文所述对大家的asp.net程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET数据库操作类实例
  • ASP.NET导出word实例
  • asp.net反射简单应用实例
  • ASP.NET中的C#基础知识
  • asp.net core mvc实现文件上传实例
  • ASP.NET Core 导入导出Excel xlsx 文件实例
  • Asp.net中安全退出时清空Session或Cookie的实例代码
  • asp.net保存网上图片到服务器的实例
  • asp.net多文件上传实例讲解
  • ASP.Net分页的分页导航实例

相关文章

  • 2017-05-11利用.net控件实现下拉导航菜单制作的具体方法
  • 2017-05-11如何用Response.Redirect方法传递汉字
  • 2018-08-20ASP.NET Core MVC 过滤器的使用方法介绍
  • 2017-05-11ASP.NET五步打包下载Zip文件实例
  • 2017-05-11Asp.Net实现无限分类生成表格的方法(后台自定义输出table)
  • 2017-05-11Asp.net实时显示文本框字数实现代码
  • 2017-05-11ASP.NET实现页面传值的几种方法小结
  • 2017-05-11FileStreaReder和StreamReader两个类介绍
  • 2017-05-11从ASP.NET得到Microsoft Word文档的代码
  • 2017-05-11那些年,我还在学习asp.net(二) 学习笔记

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 几个C#常用正则表达式的总结
    • ASP.NET 2.0 中收集的小功能点(转)
    • Asp.net Core 初探(发布和部署Linux)
    • asp.net mvc验证码类使用
    • asp.net图片文件的上传与删除方法
    • 基于自定义Unity生存期模型PerCallContextLifeTimeManager的问题
    • HTTP协议下用Web Service上传大文件的解决方案
    • .Net Core使用Socket与树莓派进行通信详解
    • 一步步打造简单的MVC电商网站BooksStore(1)
    • ASP.NET表单验证方法详解第1/2页

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有