使用SignalR更新页时时面动态

最近的新项目中有个需求,要求用户在用户抢先体验中参加了活动,在其他的页面中的动态滚动栏中可以立刻显示,最新的活动参与信息。

以前可以用Javascript在前台使用长轮询的方法,这次使用了微软的一个开源库SignalR,SignalR可以在ASP .NET 的Web项目中实现实时通信。

一般情况下,SignalR会使用Javascript的长轮询( long polling),实现客户端和服务端通信。在WebSockets出现以后,SignalR支持WebSockets通信。SignalR使用了服务端的任务并行处理技术以提高服务器的扩展性。

看看我是如何实现这个功能的,注意项目一定要选择.net Framework4.5及以上

1.首先使用NuGet获取 Microsoft ASP.NET SignalR,项目中就会自动引入相关的dll和js

2.创建数据模型类(这里我使用一个自定义的MessageRepertory类模拟数据仓库)

public class MessageRepertory
    {

        public string Name { get; set; }
        public string Msg { get; set; }
        public static List<MessageRepertory> m = new List<MessageRepertory>();//模拟数据源
        public static List<MessageRepertory> getMessage()
        {

            if (m != null)
                return m;
            else
                return null;

        }
         public static List<MessageRepertory> AddMessage()
        {
            Random r = new Random();
            MessageRepertory A = new MessageRepertory { Name = "用户" + r.Next(1, 100).ToString(), Msg = "随机数" + r.Next(1, 100).ToString() };
            m.Add(A);
            return m;

        }
    }
}

3.创建MessageHub类

 public class MessageHub : Hub
    {
        public List<MessageRepertory> Send()
        {
            List<MessageRepertory> m = MessageRepertory.getMessage();
            string messages = JsonConvert.SerializeObject(m);
            return m;
        }

    }

4创建控制器MessageController

  public class MessageController : Controller
    {
        //
        // GET: /Chat/
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult Add()//模拟抢先体验
        {
             return View();
        }
        public ActionResult Update()
        {
           var a= MessageRepertory.AddMessage();
           GlobalHost.ConnectionManager.GetHubContext<MessageHub>().Clients.All.updateInfo();
            return Content("发送成功");
        }
    }

5.创建一个启动类,映射SignalR

[assembly: OwinStartupAttribute(typeof(SignalRTest.Startup))]
namespace SignalRTest
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
            app.MapSignalR();//映射
        }
    }
}

6.创建相关视图

A   index视图

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/jquery.signalR-2.1.2.min.js"></script>
    <script src="/signalr/hubs"></script><!--由SignalR动态载入.-->
    <style type="text/css">
        .container {
            background-color: #99CCFF;
            border: thick solid #808080;
            padding: 20px;
            margin: 20px;
        }
    </style>
     <script type="text/javascript">
        $(function () {

                    var message= $.connection.messageHub
            function showmessage() {
                message.server.send().done(function (messages) {
                    var dis = $("#discussion");
                    dis.html("");
                    $.each(messages, function (index,item) {

                        dis.append(‘<li><strong>‘ + item.Name
                    + ‘</strong>:&nbsp;&nbsp;‘ + item.Msg + ‘</li>‘);

                    });

                });

            }
            $.extend(message.client, {
                updateInfo: function () {
                    return showmessage();
                }
            });
            $.connection.hub.start().pipe(showmessage);//开启客户端SignalR,并首次运行init

        });
    </script>
</head>
<body>
    <div class="container">        <ul id="discussion"></ul>
    </div>
</body>
</html>

B Add视图

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Add</title>
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#up").click(function () {

                $.get("Update", function (data) {
                    alert(data);

                });

            });

        });

    </script>
</head>
<body>
    <div>
        <input id="up" type="button" value="update" />
    </div>
</body>
</html>

运行效果:

时间: 2024-09-27 01:20:27

使用SignalR更新页时时面动态的相关文章

.NET MVC采用SignalR更新在线用户数

学到新东西就记录一下.也许正好有人需要~~~~~~ 由于需要记录当前在线用户,emmmm又是没做过的... 本来想用数据库的形式,但是想想这么简单的功能百度肯定有.遨游一波百度,有所收获.... 虽然老是那么几篇文章重复.... 大概就是在用户登录时Session记录下数据,前台获取展示.下面这个文章感觉蛮好的. Session方法参考网址: https://www.cnblogs.com/taobox/p/4466187.html 看文章想起了我项目中有用到SignaIR,这个可以实现聊天室肯

cocos2d-js 在线更新代码脚本 动态更新脚本程序 热更新

一.cocos2d-js 动态更新的基本思路 动态更新的好处不言而喻,不需要重新上架审核,能节省很多时间,也能让用户尽快使用上最新的版本,减少下载的成本. 官方BETA版本后提供了AssetsManager类,可以完成动态更新的步骤,说明:https://github.com/chukong/cocos-docs/blob/master/manual/framework/html5/v3/assets-manager/zh.md cocos2d程序安装后,以Android为例,程序存在于2个地方

基于PHP生成静态页的实现方法

t1.php 复制代码 代码如下: <?php// 方法一根据模版生成静态页面// replaceTemplateString函数用于替换模板中指定字符串function replaceTemplateString($templateString) {    // 用来替换的变量    $title = "文章标题";    $body = "这里是文章主体";    // 替换模板 中指定字符串    $showString = str_replace (

dedecms讲解-arc.listview.class.php分析,列表页展示

./plus/list.php - 动态展示栏目列表页(也可能是频道封面) arc.listview.class.php 是dedecms的列表页的相关处理类 __construct()           // 初始化一些字段,变量CountRecord()           // 统计列表记录,总条目数,每页条目数,并对列表模板进行解析MakeHtml()              // 创建列表页HTML,主要是后台批量生成Display()               // 解析并展示

Java Web学习(2):静态网页与动态网页

一静态网页 (1)静态网页概述 在网站设计中,纯粹HTML(标准通用标记语言下的一个应用)格式的网页通常被称为"静态网页",静态网页是 标准的HTML文件,它的文件扩展名是.htm..html,可以包含文本.图像.声音.FLASH动画.客户端脚本和ActiveX 控件及JAVA小程序等.静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的. 静态网页是相对于动态网页而言,是指没有后台数据库.不含程序和不可交互的网页.静态网页相对更新起来比 较麻烦,适用于一般更新较少的展示型网站

JSP 最佳实践: 用 jsp:include 控制动态内容

在新的 JSP 最佳实践系列的前一篇文章中,您了解了如何使用 JSP include 伪指令将诸如页眉.页脚和导航组件之类的静态内容包含到 Web 页面中.和服务器端包含一样,JSP include 伪指令允许某个页面从另一个页面提取内容或数据.清单 1 重温了 include 伪指令. 清单 1. JSP include 伪指令 <![CDATA[ <%@ page language="java" contentType="text/html" %&g

装载与动态链接

装载与动态链接 1可执行文件的装载与进程 可执行文件只有装载到内存后才能被CPU执行.早期的程序装载十分简陋,装载的基本过程就是把程序从外部存储器中读取到内存中的某个位置. 历史有过的装载方式包括覆盖装载.页映射. 1.1 进程虚拟地址空间 程序是一个静态的概念,它就是一些预先编译好的指令和数据集合的一个文件:进程则是一个动态的概念,它是程序运行的一个过程. 每个程序被运行起来以后,都有自己的虚拟地址空间,这个虚拟地址空间的大小由计算机的硬件平台决定,具体地说是由CPU的位数决定的. 1.2 装

快速了解SignalR—在MVA微软虚拟学院学习SignalR

©版权声明:本文为博主原创文章,如需转载请注明出处. SignalR把实时Web功能变得异常简单. 如果您希望在几个小时内对SignalR有一个直观的了解,观看微软虚拟学院(MVA)的视频教学Lighting Up Real-Time Web Communications with SignalR或许是个不错的选择. 这是一个大概四个小时的视频教学,分为五个部分.除了视频,还配有PPT和小测验.视频是英文的,配有英文字幕.通过这几个小时的学习,您将对SignalR的功能以及如何使用有一个初步的了

datable 翻页事件处理

JQuery datatable插件,点下一页在点击事件无效问题 (2013-10-16 16:01:54) 转载▼   分类: C# 在MVC的项目中,我利用jquery datatable 来实现前台页面查询表格数据显示.但是在我点击下一页的时候,不会响应我的jquery的点击事件.在点第一页的时候的可以响应点击事件. 为什么,感觉像表格的下一页数据是动态js生成的.而jquery是在第一次加载页面的时候加载的.对于jquery来说,下一页的表格数据就相当于未来的html的标签数据.所以无法