基于ajax与msmq技术的消息推送功能实现代码


Posted in Javascript onDecember 26, 2016

周末在家捣鼓了一下消息推送的简单例子,其实也没什么技术含量,欢迎大伙拍砖。

我设计的这个推送demo是基于ajax长轮询+msmq消息队列来实现的,具体交互过程如下图:

基于ajax与msmq技术的消息推送功能实现代码

先说说这个ajax长轮询,多长时间才算长呢?这个还真不好界定。

这里是相对普通ajax请求来说的,通常处理一个请求也就是毫秒级别的时间。但是这里的长轮询方式

在ajax发送请求给服务器之后,服务器给调用端返回数据的时间多长那可还真不好说。嘿嘿,这关键要看

我们啥时候往msmq队列中推送数据了,先看看推送的效果图吧。。。。。

基于ajax与msmq技术的消息推送功能实现代码

抱歉,没弄张动态效果图给大家。实现的功能大体上就是这样。上图中的winform程序中我们点击即刻发送按钮,同时网页上我们就能看到新推送的数据。

好了,说完具体实现流程和效果之后马上就开始编码实现吧。。。。

消息推送Winform程序代码

namespace SenderApp
{
  public partial class Form1 : Form
  {
    private string queueName = @".\Private$\pushQueue";
    private MessageQueue pushQueue = null;
    
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      try
      {
        var queue = this.GetQueue();
        if (string.IsNullOrEmpty(this.textBox1.Text)) { this.label1.Text = "推送消息不能为空"; return; }
        queue.Send(this.textBox1.Text, "messagePush");
        this.label1.Text = "消息推送成功";
      }
      catch (Exception ex)
      {
        this.label1.Text = string.Format("消息推送失败:{0}",ex.Message);
      }
    }

    private MessageQueue GetQueue()
    {
      if (this.pushQueue == null)
      {
        if (!MessageQueue.Exists(queueName))
        {
          this.pushQueue = MessageQueue.Create(queueName);
        }
        else
        {
          this.pushQueue = new MessageQueue(queueName);
        }
      }
      return this.pushQueue;
    }

    private void textBox1_MouseDown(object sender, MouseEventArgs e)
    {
      this.textBox1.Text = "";
      this.label1.Text = "推送状态";
    }
  }
}

Web服务端代码

namespace MessagePushWeb.Controllers
{
  public class HomeController : Controller
  {
    private static string queueName = @".\Private$\pushQueue";
    private static MessageQueue pushQueue = null;

    public ActionResult Index()
    {
      return View();
    }

    public async Task<ActionResult> GetMessage()
    {
      string msg = await Task.Run(() => {
        return this.ReadMessage();
      });
      
      return Content(msg);
    }


    private MessageQueue GetQueue()
    {
      if (pushQueue == null)
      {
        if (MessageQueue.Exists(queueName))
        {
          pushQueue = new MessageQueue(queueName);
          pushQueue.Formatter = new XmlMessageFormatter(new string[] { "System.String" });
        }
      }
      return pushQueue;
    }

    private string ReadMessage()
    {
      var queue = GetQueue();
      Message message = queue.Receive();
      return message.Body.ToString();
    }
  }
}

页面视图代码

@{
  ViewBag.Title = "Push";
}


<h2>Push</h2>

<div>接收消息列表</div>
<div id="msg"></div>

<script type="text/javascript">
  $(function () {
    getMessage();
  });


  function getMessage() {
    $.get("/home/getmessage", {}, function (data) {
      var _msg = $("#msg").html();
      $("#msg").html(_msg + "<li>" + data + "</li>");
      getMessage();
    });
   }
</script>

当然,在这个只是一个初级的消息推送demo,是否能胜任生产环境的需要还有待考证。

如果你也有更好的实现和建议,都欢迎留言给我。

源码在这里:http://pan.baidu.com/s/1hsHSLTy

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
php利用curl获取远程图片实现方法
Oct 26 Javascript
js实现文件上传表单域美化特效
Nov 02 Javascript
JS中call/apply、arguments、undefined/null方法详解
Feb 15 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
Nov 03 Javascript
js实现日历的简单算法
Jan 24 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
Jun 05 Javascript
vue.js将时间戳转化为日期格式的实现代码
Jun 05 Javascript
Vue 路由 过渡动效 数据获取方法
Jul 31 Javascript
JS数组求和的常用方法实例小结
Jan 07 Javascript
vue-cli和v-charts实现可视化图表过程解析
Oct 08 Javascript
vue data引入本地图片的两种方式小结
Nov 13 Javascript
利用JS判断元素是否为数组的方法示例
Jan 08 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
Dec 26 #Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
Dec 26 #Javascript
Bootstrap的modal拖动效果
Dec 25 #Javascript
原生ajax处理json格式数据的实例代码
Dec 25 #Javascript
JS异步文件分片断点上传的实现思路
Dec 25 #Javascript
BootStrop前端框架入门教程详解
Dec 25 #Javascript
半个小时学json(json传递示例)
Dec 25 #Javascript
You might like
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
python处理按钮消息的实例详解
2017/07/11 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
pandas分区间,算频率的实例
2019/07/04 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
应届毕业生的自我鉴定
2013/11/13 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
运动会方队口号
2014/06/07 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
同学聚会感言一句话
2015/07/30 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
DE1107机评
2022/04/05 无线电