国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

基于ajax與msmq技術(shù)的消息推送功能實(shí)現(xiàn)代碼

2019-11-19 18:16:21
字體:
供稿:網(wǎng)友

周末在家搗鼓了一下消息推送的簡單例子,其實(shí)也沒什么技術(shù)含量,歡迎大伙拍磚。

我設(shè)計(jì)的這個(gè)推送demo是基于ajax長輪詢+msmq消息隊(duì)列來實(shí)現(xiàn)的,具體交互過程如下圖:

先說說這個(gè)ajax長輪詢,多長時(shí)間才算長呢?這個(gè)還真不好界定。

這里是相對普通ajax請求來說的,通常處理一個(gè)請求也就是毫秒級別的時(shí)間。但是這里的長輪詢方式

在ajax發(fā)送請求給服務(wù)器之后,服務(wù)器給調(diào)用端返回?cái)?shù)據(jù)的時(shí)間多長那可還真不好說。嘿嘿,這關(guān)鍵要看

我們啥時(shí)候往msmq隊(duì)列中推送數(shù)據(jù)了,先看看推送的效果圖吧。。。。。

抱歉,沒弄張動(dòng)態(tài)效果圖給大家。實(shí)現(xiàn)的功能大體上就是這樣。上圖中的winform程序中我們點(diǎn)擊即刻發(fā)送按鈕,同時(shí)網(wǎng)頁上我們就能看到新推送的數(shù)據(jù)。

好了,說完具體實(shí)現(xiàn)流程和效果之后馬上就開始編碼實(shí)現(xiàn)吧。。。。

消息推送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 = "推送狀態(tài)";    }  }}

Web服務(wù)端代碼

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>

當(dāng)然,在這個(gè)只是一個(gè)初級的消息推送demo,是否能勝任生產(chǎn)環(huán)境的需要還有待考證。

如果你也有更好的實(shí)現(xiàn)和建議,都?xì)g迎留言給我。

源碼在這里:http://pan.baidu.com/s/1hsHSLTy

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富裕县| 安平县| 祁东县| 桑植县| 郑州市| 岱山县| 元江| 那坡县| 昌黎县| 海原县| 寿宁县| 山阳县| 盐山县| 石家庄市| 丹江口市| 荥阳市| 辽阳市| 内丘县| 沙雅县| 苍梧县| 宝山区| 剑河县| 兰溪市| 贵港市| 洪雅县| 抚宁县| 西丰县| 江山市| 无锡市| 海城市| 建瓯市| 灵川县| 关岭| 积石山| 蓬安县| 库伦旗| 长岛县| 桂阳县| 天全县| 凌源市| 微博|