利用Ajax+MSMQ(消息队列)+WebService实现服务器端向客户端的信息推送
需求:
每当数据库有数据更新时,推送到客户端
软需求:
1、服务器资源有限,要求资源占用尽可能小;
2、项目可控,不许调用第三方不可信不稳定的方法。
已有事例:
1、58到家采用的方法是TCP的长连接,对服务器压力较大;
2、redis等提供了订阅推送服务,开源,但是定制化对开发者其开发语言水平要求较高,笔者水平达不到
最终方案:
aaarticlea/png;base64,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" alt="" />
解释:
①②页面加载时第一次请求数据,返回数据,加载,调用ajax2
③页面加载即发出请求,但是此时没有数据,于是就block,等待其他组件insert msg
④收取新msg后,返回值给ajax2
⑤ajax2调用ajax1
⑥ajax1刷新数据
block后ajax2只在服务器占用一个线程,资源消耗很小。
===================下面是代码=======================
1、文件结构
aaarticlea/png;base64,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" alt="" />
2、receive.cs//MSMQ的接收类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Messaging; namespace WebApplication1
{
public class receive
{
public String receives()
{
var queue = new MessageQueue(@".\private$\MsgQueue");
queue.Formatter = new XmlMessageFormatter(
new string[] { "System.String" }
);
Message m = queue.Receive();
return m.Body.ToString();
}
}
}
2、send.cs//MSMQ的发送类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Messaging;
namespace WebApplication1
{
public class send
{
public string create(String msg)
{
try
{
if (!MessageQueue.Exists(@".\private$\MsgQueue"))
{
MessageQueue.Create(@".\private$\MsgQueue");
}
var queue = new MessageQueue(@".\private$\MsgQueue"); queue.Send(msg, "Label");
return "ok";
}
catch (Exception ex)
{
return "error";
}
}
}
}
3、MQGiver.asmx//核心WebService
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using WebApplication1; namespace 服务器接收mq
{
/// <summary>
/// MQGiver 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
[Serializable]
public class MQGiver : System.Web.Services.WebService
{ [WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public void GiveMsg()
{
receive r = new receive();
String msg = r.receives();
String Json = "{\"msg\":\"" + msg + "\"}";
string callback = HttpContext.Current.Request["jsoncallback"];
HttpContext.Current.Response.Write(callback + "(" + Json + ")");
}
[WebMethod]
public void GiveData()
{
String Json = "{\"msg\":\"ok\"}";
string callback = HttpContext.Current.Request["jsoncallback"];
HttpContext.Current.Response.Write(callback + "(" + Json + ")"); }
}
}
4、MSGadd.aspx//模拟向MSMQ添加数据
前台代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MSGadd.aspx.cs" Inherits="服务器接收mq.MSGadd" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div> </div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html> //================================================
后台代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplication1; namespace 服务器接收mq
{
public partial class MSGadd : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
} protected void Button1_Click(object sender, EventArgs e)
{
send s = new send();
Label1.Text = s.create(TextBox1.Text);
} }
}
5、调用界面
<html>
<head>
<!--自己注意jq包的引用-->
<script src="jq.js"></script>
</head>
<body>
<script type="text/javascript">
function getdata(){
$.ajax({
url: "http://localhost:55843/MQGiver.asmx/GiveData?jsoncallback=?",
dataType: "jsonp",
success: OnSuccess,
});
function OnSuccess(json) {
$("#la").text(json.msg)
getmsg();
}
} function getmsg(){
$.ajax({
url: "http://localhost:55843/MQGiver.asmx/GiveMsg?jsoncallback=?",
dataType: "jsonp",
success: OnSuccess1,
});
function OnSuccess1(json1) {
getdata();
}
}
getdata();
</script>
<label id="la">
</label>\
</body>
</html>
整个项目就是这样的,已通,有好的建议和问题欢迎留言!
利用Ajax+MSMQ(消息队列)+WebService实现服务器端向客户端的信息推送的更多相关文章
- 跟我一起学WCF(1)——MSMQ消息队列
一.引言 Windows Communication Foundation(WCF)是Microsoft为构建面向服务的应用程序而提供的统一编程模型,该服务模型提供了支持松散耦合和版本管理的序列化功能 ...
- 微软MSMQ消息队列的使用
首先在windows系统中安装MSMQ 一.MSMQ交互 开发基于消息的应用程序从队列开始.MSMQ包含四种队列类型: 外发队列:消息发送到目的地之前,用它来临时存储消息. 公共队列:在主动目录中公布 ...
- 利用System V消息队列实现回射客户/服务器
一.介绍 在学习UNIX网络编程 卷1时,我们当时可以利用Socket套接字来实现回射客户/服务器程序,但是Socket编程是存在一些不足的,例如: 1. 服务器必须启动之时,客户端才能连上服务端,并 ...
- Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)
原文:Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇) 老话说的好:好记心不如烂笔头! 本着这原则,我把最近工作中遇到的jquery利用ajax调用web服务的 ...
- WCF之MSMQ消息队列
一.MSMQ简介 MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式.松散连接的消息通讯应用程序的开发工具. MSMQ与XML Web Services和.Net ...
- 【转】MSMQ消息队列安装
一.Windows 7安装.管理消息队列1.安装消息队列 执行用户必须要有本地 Administrators 组中的成员身份,或等效身份. 具体步骤: 开始—>控制面板—>程 ...
- MSMQ消息队列安装
一.Windows 7安装.管理消息队列1.安装消息队列 执行用户必须要有本地 Administrators 组中的成员身份,或等效身份. 具体步骤: 开始—>控制面板—>程 ...
- 【6】.net msmq消息队列实例
1.msmq消息队列windows环境安装 控制面板---->程序和功能---->启用或关闭Windows程序---->Microsoft Message Queue(MSMQ)服务 ...
- php 微信客服信息推送失败 微信重复推送客服消息 40001 45047
/*** * 微信客服发送信息 * 微信客服信息推送失败 微信重复推送客服消息 40001 45047 * 递归提交到微信 直到提交成功 * @param $openid * @param int $ ...
随机推荐
- web前端代码编写体验
最好是使用HTML5的有意义的标签,并尝试在不同的,老版本的浏览器中也保持一致,不然你会发现,满屏都是div,后期进行代码验证,修改和查找简直是一场大灾难. 而且,编写代码的时候,为了方便以后代码的复 ...
- [CodeForces - 712D]Memory and Scores (DP 或者 生成函数)
题目大意: 两个人玩取数游戏,第一个人分数一开始是a,第二个分数一开始是b,接下来t轮,每轮两人都选择一个[-k,k]范围内的整数,加到自己的分数里,求有多少种情况使得t轮结束后a的分数比b高. ( ...
- PhoneGap初试!
最近公司准备开发一个移动应用,方便起见准备开发web项目,用PhoneGap打包成iOS与Android平台的应用.对PhoneGap完全不了解,所以先装个试下.折腾了大半天,总算弄出点儿眉目,整理下 ...
- C# 中 多线程同步退出方案 CancellationTokenSource
C# 中提供多线程同步退出机制,详参对象: CancellationTokenSource CancellationTokenSource 中暂未提供复位操作,因此当调用Cancle 之后,若再次调用 ...
- Android中的自定义视图控件
简介 当现有控件不能满足需求时,就需要自定义控件. 自定义控件属性 自定义控件首先要继承自View,重写两个构造函数. 第一个是代码中使用的: public MyRect(Context contex ...
- java.net.UnknownHostException: Unable to resolve host "api102.meishi.cc": No address associated with hostname
有三个原因: 清单文件Mei加网络访问权限 在主线程中执行了耗操作 你没开wifi
- 面试复习(C++)之直接插入排序
#include <iostream> using namespace std; void Insertsort(int *a,int len) { ;j<len;j++) { in ...
- Oracle之内存结构(SGA、PGA)
一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. ...
- python取文件最后几行
with open("text.txt") as f: txt=f.readlines() keys=[k for k in range(0,len(txt))] resu ...
- 在一台机器上模拟mongodb分片
首先选择一个目录在其中建立以下2个文件夹:data和log 在data下建立9个文件夹: 其中前3个为配置服务器所在文件夹,按照官网要求,一个集群需要3个config server rs-a-n和rs ...