基于SignalR、ActiveMQ实现webform的实时消息广播

       什么是SignalR?

      ASP.NET SignalR 是为.NET 开发者提供即时通讯Web 应用的类库。即时通讯Web服务就是服务器将内容自动推送到已经连接的客户端,而不是服务器等待客户端发起一个新的数据请求。

     SignalR能够被运用到各种类型的即时响应应用。你完全可以运用SignalR实现一个在线即时聊天应用。当然SignalR也运用在用户需要随时更新数据的网页运用,比如仪表盘和监控运用,其他协同应用程序(文档协同操作)、工作流更新或者是即时表格。

       SignalR 提供了使用JavaScript API 方法创建服务器对客户端的远程过程调用协议(RPC)的,它能够让你从客户端浏览器(或者其他平台)从.NET服务端发起远程调用。SignalR 同样提供了管理远程连接和连接组的API方法。

       SignalR 不仅能够自动管理连接,而且能够同时向所有的客户端广播消息,就像聊天室一样。你也能够发送消息到指定的客户端。SignalR提供的连接是持久的,它不像传统的HTTP连接需要为每次收发消息建立单独的连接。

         SignalR 同时在服务端提供了远程过程调用协议(RPC),让你能够“主动”推送消息到浏览器中的客户端,而不像普通的Web服务一样的应答方式。

ActiveMQ介绍

    MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。

特点:

1、支持多种语言编写客户端

2、对MVC、WebFrom的支持,很容易和MVC、WebFrom整合

3、支持多种传输协议:TCP,SSL,NIO,UDP等

4、支持AJAX

消息形式:

1、点对点(queue)

2、一对多(topic)

实例项目工程简介

工程目录如下图:

Signalr.ActiveMQ:类库项目,包含消息生产者及消息消费者

ProcucerDome:控制台项目,模拟前置机发送消息

SignalRDome:asp.net web项目,模拟web客户端

 

一、建立asp.net web应用程序(SignalRDome)

第一步:打开一个SignalRDome项目文件

加入SignalR引用,在程序包管理控制台输入命令:Install-package Microsoft.Aspnet.Signalr

加入SignalR成功后的项目目录

第二步:加入ActiveMQ引用,在程序包管理控制台输入命令:Install-Package Apache.NMS.ActiveMQ

第三步:加入Signalr.ActiveMQ引用

第四步:在SignalRDome项目的根目录下建立SignalR文件夹,并在文件夹中建立客户端hub代理类(ChatHub)

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using SignalR.ActiveMQ;
using System.Threading.Tasks;
using System.Web;

namespace SignalRDome.SignalR
{
    [HubName("chatHub")]
    public class ChatHub : Hub
    {
        public void Send(string message,string call = "")
        {
            Procucer.GetInstance().Send(message,call);
        }
        public override Task OnConnected()
        {
            Customer.Clients = this.Clients;
            return base.OnConnected();
        }

        public override Task OnDisconnected(bool stopCalled)
        {
            Customer.Clients = this.Clients;
            return base.OnDisconnected(stopCalled);
        }
    }
}

第五步:建立Startup

using Microsoft.Owin;
using Owin;
using SignalR.ActiveMQ;
using System;

[assembly: OwinStartup(typeof(SignalRDome.SignalR.Startup))]
namespace SignalRDome.SignalR
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();

            Customer.Run();//启动消费者监听线程
        }
    }
}

第六步:在前台页面中加入监听,一半添加在Index.aspx中

<script src="Scripts/jquery-1.10.2.min.js"></script>
<script src="Scripts/jquery.signalR-2.3.0.min.js"></script>
<script src="signalr/hubs"></script>

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

        ///可以在这里进行权限验证,没有权限的客户端,不创建监听
        var handler = $.connection.chatHub;// 生成客户端hub代理
        // 添加客户端hub方法以供服务端调用
        handler.client.broadcastMessage = function (call, msg) {
            //接收服务端消息
            alert(msg);
        }
        //日志输出,以备调试使用
        $.connection.hub.logging = true;
        // 开启hub连接
        $.connection.hub.start();
    });
</script>

至此asp.net web应用程序处理完成。

二、建立控制台应用程序(ProcucerDome)

第一步:引用Signalr.ActiveMQ

第二步:创建并发送消息

using SignalR.ActiveMQ;
using System;

namespace ProcucerDome
{
    class Program
    {
        static void Main(string[] args)
        {
            ///模拟前置机发送报警消息
            Console.WriteLine("请输入要向客户端发送的消息:");
            Procucer producer =  Procucer.GetInstance();//创建消息生产者
            while (true)
            {
                var msg = Console.ReadLine();//模拟报警消息
                producer.Send(msg);//发送消息
            }
        }
    }
}

至此,控制台应用程序处理完毕。

三、启动顺序

1、启动ActiveMQ程序

       A)ActiveMQ服务器上要安装JAVA运行环境

       b)下载ActiveMQ,官方网站下载:http://activemq.apache.org/

    c)解压缩后双击apache-activemq-5.15.4\bin\win64\activemq.bat运行ActiveMQ程序。若服务器为32位系统,则双击win32文件下的activemq.bat运行ActiveMQ程序。

2、启动ProcucerDome项目

3、启动SignalRDome,开多个浏览器窗口,模拟多个SignalR客户端

 

注意事项:重启ActiveMQ程序后,应立即重启ProcucerDome及IIS,否则将出现前置机无法发送消息、web客户端无法接收消息情况。

 

注:SignalR参考地址:https://docs.microsoft.com/zh-cn/aspnet/signalr/

源代码及ActiveMQ下载:https://download.csdn.net/download/sinat_34114070/10568464

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值