NET Core2基于RabbitMQ对Web前端实现推送功能

https://www.cnblogs.com/Andre/p/10012329.html

在我们很多的Web应用中会遇到需要从后端将指定的数据或消息实时推送到前端,通常的做法是前端写个脚本定时到后端获取,或者借助WebSocket技术实现前后端实时通讯。因定时刷新的方法弊端很多(已不再采用),所以基于WebSocket技术实现的通讯方案正越来越受大家喜爱,于是在ASP.NET中就有了鼎鼎大名的Signalr。但Signalr不是咱们这里的主角,这里将给大家介绍另一套基于WebSocket的前后端通讯方案,可以给大家在应用中多一个选择。

准备

在开始动手前,咱们先简单介绍下方案的组成部分,如下:

RabbitMQ:是一个成熟的MQ队列服务,由 Erlang 语言开发的 AMQP 的开源实现。这里用来接收后端的指令并广播到前端(基于topic模式)。关于更多RabbitMQ的实现可以查看我另一篇文章,传送门

RabbitMQ插件stomp:是一个让RabbitMQ支持stomp协议的插件,必需安装后才能通过RabbitMQ实现前端通讯。安装说明在此:http://www.rabbitmq.com/stomp.html

stomp.js:是一个基于stomp协议的客户端实现,底层基于WebSocket通讯协议。这里用于前端实现WebSocket通讯。官网地址:https://github.com/jmesnil/stomp-websocket

Lezhima.Rest:是一个基于ASP.NET Core2的Web Api后端程序,用来模拟向前端发送指令。

Lezhima.Site:是一个纯前端技术的前端程序,用来模拟前端实时接收后台的指令。

实现

如上面所述,我们已经清楚了整个实现思路,那么下面就来看看具体的代码实现吧。

1、首先来看看Lezhima.Rest的MQ生产者代码,如下:

复制代码
1 ///

2 /// MQ生产者,采用topic模式推送指定内容
3 ///

4 ///
5 public static void PushMessage(string objText)
6 {
7 //创建MQ连接工厂
8 var factory = new ConnectionFactory()
9 {
10 HostName = "localhost",
11 Port = 5672,
12 UserName = "fans",
13 Password = "123456"
14 };
15 //创建MQ连接
16 using (var connection = factory.CreateConnection())
17 using (var channel = connection.CreateModel())
18 {
19 //绑定交换器
20 channel.ExchangeDeclare(exchange: "topic/test", type: "topic");
21 var body = Encoding.UTF8.GetBytes(objText);
22 //对指定routingkey发送内容
23 channel.BasicPublish(exchange: "amq.topic",
24 routingKey: "test",
25 basicProperties: null,
26 body: body);
27 }
28 }
复制代码

2、Lezhima.Site的前端代码,如下:

复制代码
1 <!DOCTYPE html>
2
3
4
5
6
7
8
9
10 .box {
11 width: 440px;
12 float: left;
13 margin: 0 20px 0 20px;
14 }
15 .box div, .box input {
16 border: 1px solid;
17 -moz-border-radius: 4px;
18 border-radius: 4px;
19 width: 100%;
20 padding: 5px;
21 margin: 3px 0 10px 0;
22 }
23
24 .box div {
25 border-color: grey;
26 height: 300px;
27 overflow: auto;
28 }
29
30 div code {
31 display: block;
32 }
33
34 #first div code {
35 -moz-border-radius: 2px;
36 border-radius: 2px;
37 border: 1px solid #eee;
38 margin-bottom: 5px;
39 }
40
41
42
43

44

接收来自后端的消息

45

46

47
81
82
83
复制代码

3、分别运行“Lezhima.Rest”与“Lezhima.Site”程序后,效果是这个样子的,如下:

1543044548(1)

总结

1、借助RabbitMQ实现前后端通讯功能时,必需先安装RabbitMQ插件stomp,通过该插件可使RabbitMQ支持WebSocket通讯能力。而我们的后端开发人员只需通过“生产者”方法按需向MQ发送数据即可,MQ将根据routingKey广播给所有客户端(消费者)。

2、前端借助stomp.js可以简便的实现与RabbitMQ通讯,并绑定相应的routingKey后承担MQ消费者的能力,以达到前后端即时推送的效果。

NET Core2基于RabbitMQ对Web前端实现推送功能的更多相关文章

  1. ASP.NET Core2基于RabbitMQ对Web前端实现推送功能

    在我们很多的Web应用中会遇到需要从后端将指定的数据或消息实时推送到前端,通常的做法是前端写个脚本定时到后端获取,或者借助WebSocket技术实现前后端实时通讯.因定时刷新的方法弊端很多(已不再采用 ...

  2. SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用

    最近在公司闲着没事研究了几天,终于搞定了SSE从理论到实际应用,中间还是有一些坑的. 1.SSE简介 SSE(Server-sent events)翻译过来为:服务器发送事件.是基于http协议,和W ...

  3. 基于Web的数据推送技术(转)

    基于Web的数据推送技术 对于实时性数据显示要求比较高的系统,比如竞价,股票行情,实时聊天等,我们的解决方案有以下几种.1. HTTP请求发送模式,一般可以基于ajax的请求,比如每3秒一次访问下服务 ...

  4. web前端除了关注代码功能实现,还应具备web性能优化以及SEO优化的常识

    web前端除了关注代码功能实现,还应具备web性能优化以及SEO优化的常识 ——不会WPO.SEO的前端工程师不是好码农 作为一名web前端工程师,除了要实现上级的要求,满足其所需要的功能,还要在平时 ...

  5. 我有 7种 实现web实时消息推送的方案,7种!

    技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...

  6. Web端服务器推送技术原理分析及dwr框架简单的使用

    1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切 ...

  7. Web端server推送技术原理分析及dwr框架简单的使用

    1 背景 "server推送技术"(ServerPushing)是近期Web技术中最热门的一个流行术语.它是继"Ajax"之后又一个倍受追捧的Web技术.&qu ...

  8. Android消息推送(二)--基于MQTT协议实现的推送功能

    国内的Android设备,不能稳定的使用Google GCM(Google Cloud Messageing)消息推送服务. 1. 国内的Android设备,基本上从操作系统底层开始就去掉了Googl ...

  9. H5 EventSource 实现web页面推送功能demo

    /** * H5 EventSource 实现web页面推送功能demo */ var serverData,statusDiv; var SERVER_URL = "index.php&q ...

随机推荐

  1. hiho 1318 非法二进制数 dp

    #1318 : 非法二进制数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 如果一个二进制数包含连续的两个1,我们就称这个二进制数是非法的. 小Hi想知道在所有 n 位 ...

  2. MySQL索引失效的场景

    WHERE字句的查询条件里有不等于号(WHERE column!=-),MYSQL将无法使用索引 类似地,如果WHERE字句的查询条件里使用了函数(如:WHERE DAY(column)=-),MYS ...

  3. Win10配Theano环境和Keras框架

    网络上有各种各样的win7 64bit安装theano的方法,我也试过好多,各种各样的问题.因为之前没了解过MinGw等东西,所以安装起来比较费劲,经过不断的尝试,最终我按照以下过程安装成功. 其实过 ...

  4. LR简单解析

  5. 如何使用POST 方法调用服务

    一.WCF REST专用POST方法 1.1.        建立WCF REST 方法 [ServiceContract] public interface IBookingBizService { ...

  6. 大小堆C++实现

    C++大小堆实现(仿函数) 具体代码如下 #pragma once #include<iostream> #include<vector> using namespace st ...

  7. HDU 4099 大数+Trie

    Revenge of Fibonacci Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 204800/204800 K (Java/ ...

  8. 常用的SpringMVC注解

    1.@RequestMapping() 访问链接编写: 例如: (1).请求方法: 访问链接: (2).请求参数和请求头: 访问链接: 2.@PathVariable 例如: 访问链接: 结果显示: ...

  9. 完整的保存onetab的书签信息

    之前在百度上找怎么完整的保存onetab的书签信息,没找到答案,于是乎上了google,在stackoverflow上找到了一个相关的答案 How to restore OneTab list of ...

  10. day6-面向对象基础篇

    一.面向对象引子及概念 结合编程的一些理论知识和实践,可以总结出目前存在以下编程模式: 1. 面向过程 按照业务逻辑和实现过程步骤来逐步垒代码,代码编写的逻辑即对应于实际实现的步骤过程,核心是过程两个 ...