消息推送SignalR:一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信。

功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求新的数据。

可参考:http://www.cnblogs.com/ssk-bak/p/5799976.html

前台关键之处:

1首先获取客户端页面的名字;

2然后通过 $.connection.chat 建立对应服务器端 Hub 类的代理对象 chat;

3服务器通过 dynamic 方式调用客户端的该方法以实现推送功能。在这里每当收到服务器推送来的消息,就在客户端页面的 discussion 列表追加该消息。

4当点击发送所有用户按钮时,客户端通过代理对象调用服务器端的 send 方法以实现向服务器发送消息。当点击发送给指定用户按钮,并填写在线的用户时,客户端通过代理对象调用服务器端的 send 方法以实现向服务器发送消息给指定用户,可同时开启两个窗口测试。

5通过 $.connection.hub.start(); 语句打开链接。

实现代码:

后台:

1.先登录,登录后用户名会记录在一个Dictionary容器中:

/// <summary>
        /// 用户的connectionID与用户名对照表
        /// </summary>
        private readonly static Dictionary<string, string> UserDictionary = new Dictionary<string, string>();
        /// <summary>
        /// 用户上线函数
        /// </summary>
        /// <param name="name"></param>
        public void sendLogin(string name)
        {
            if (!UserDictionary.Keys.Contains(name))
            {
                //这里便是将用户名和连接ID存入
                UserDictionary.Add(name, Context.ConnectionId);
            }
            else
            {
                //每次登陆id会发生变化
                UserDictionary[name] = Context.ConnectionId;
            }
        }

2.将信息发送给所有用户或指定用户:

//发送信息到指定用户
        public void Send(string fromName, string toName, string message)
        {
            if (UserDictionary[toName] != null)
            {
                Clients.Client(UserDictionary[toName]).broadcastMessage(fromName, message);
            }
        }
        //广播所有信息
        public void Send(string name, string message)
        {
            Clients.All.broadcastMessage(name, message);
        }

前台:

<body>
    <div class="container">
        当前用户:<input type="text" id="displayname" hidden="hidden" /><label id="uName"></label>
        <br /><br />
        发送消息:<input type="text" id="message" />
        <input type="button" id="sendmessage" value="发送给所有用户" />&nbsp;&nbsp;
        <input type="text" id="toUser" name="toUser" />
        <input type="button" id="sendTouser" value="发送给指定用户" />
        <br />
        <div>
            接收信息:
        </div>
        <ul id="discussion"></ul>
    </div>
    <!--Script引用-->
    <script src="Scripts/jquery-1.6.4.min.js"></script>
    <script src="Scripts/jquery.signalR-2.2.1.min.js"></script>
    <script src="signalr/hubs"></script>
    <!--更新页面并发送消息-->
    <script type="text/javascript">
        $(function () {
            //启用日志记录
            $.connection.hub.logging = true;
            // Declare a proxy to reference the hub.
            var chat = $.connection.chatHub;
            // 创建回调函数
            chat.client.broadcastMessage = function (name, message) {
                // 显示namemessage.
                var encodedName = $('<div />').text(name).html();
                var encodedMsg = $('<div />').text(message).html();
                //在页面中显示
                $('#discussion').append('<li><strong>' + encodedName + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
            };

// 页面开始时输入用户名,保存来显示该用户相关信息(实际用户登入系统是自动设置)
            $('#displayname').val(prompt('输入用户名:', ''));
            document.getElementById("uName").innerHTML = $('#displayname').val();
            // 将初始焦点设置为消息输入框。
            $('#message').focus();

//开启客户端(web)与服务器端连接
            $.connection.hub.start().done(function () {
                var username = $('#displayname').val();
                chat.server.sendLogin(username);
                $('#sendmessage').click(function () {
                    // 调用发送方法,发送给所有用户
                    chat.server.send($('#displayname').val(), $('#message').val());
                    $('#message').val('').focus();
                });
                $('#sendTouser').click(function () {
                    // 调用发送方法,发送给指定用户
                    var touser = $('#toUser').val();
                    chat.server.send(username, touser, $('#message').val());
                });
            });
        });
    </script>
</body>

效果图:

消息推送SignalR简单实例的更多相关文章

  1. C# BS消息推送 SignalR介绍(一)

    1. 前言 本文是根据网上前人的总结得出的. 环境: SignalR2.x,VS2015,Win10 介绍 1)SignalR能用来持久客户端与服务端的连接,让我们便于开发一些实时的应用,例如聊天室在 ...

  2. C# BS消息推送 SignalR Hubs环境搭建与开发(二)

    1. 前言 本文是根据网上前人的总结得出的. 环境: SignalR2.x,VS2015,Win10 2. 开始开发 1)新建一个MVC项目,叫做SignalRDemo 2)安装SignalR包 In ...

  3. 5.Android消息推送机制简单例子

    1.首先布局文件xml代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout x ...

  4. 消息推送SignalR

    一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...

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

    周末在家捣鼓了一下消息推送的简单例子,其实也没什么技术含量,欢迎大伙拍砖.我设计的这个推送demo是基于ajax长轮询+msmq消息队列来实现的,具体交互过程如下图: 先说说这个ajax长轮询,多长时 ...

  6. 使用websocket进行消息推送服务

    Websocket主要做消息推送,简单,轻巧,比comet好用 入门了解:https://www.cnblogs.com/xdp-gacl/p/5193279.html /** * A Web Soc ...

  7. WinForm中 Asp.Net Signalr消息推送测试实例

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  8. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  9. Asp.net SignalR 实现服务端消息推送到Web端

              之前的文章介绍过Asp.net SignalR,  ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.  今天我 ...

随机推荐

  1. JQuery Mobile - html5+CSS 禁止IOS长按复制粘贴实现

    因为在移动端APP需要实现长按执行别的事件,但是在IOS系统有默认的长按选择复制粘贴,禁止此功能在网上找了很多资料,最终整理出目前最好的解决方法.实际测试,也并不是很理想,但是可能没有更好办法了! / ...

  2. 异常处理,约束,MD5加密日志处理

    程序运行过程中产生的错误, 不正常 def chufa(a, b): try: # 尝试执行xxx代码 ret = a/b # 如果这里出现了错误. 异常. 系统内部会产生一个异常对象. 系统会把这个 ...

  3. apache ab

    ab -p postfile.json -T 'application/json' -n 100 -c 10 -v 2 http://192.168.1.103:3002/checkStashSlot ...

  4. Testing - 软件测试知识梳理 - 软件可靠性测试

    软件可靠性的基本概念 错误,缺陷,故障和失效 错误:指的是软件在生命周期中各个阶段的状态和行为与人们的期待不一致的偏差,不单单是软件系统本身,中间产品的偏差也算是软件错误 缺陷:指的是软件中一切不好的 ...

  5. 文件压缩小项目haffman压缩

    文件压缩的原理: 文件压缩总体可以分为有损压缩和无损压缩两类,有损压缩是指对mp3等格式的文件,忽略一些无关紧要的信息,只保留一些关键的信息,但并不因此影响用户对于这些mp3格式文件的体验度,无损压缩 ...

  6. 调用的执行器“executor://mstestadapter/v2”时发生异常: 无法找到程序集“log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a”

    加上下面的一句就好了 [TestCleanup]      public void cleanup()      {          CallContext.FreeNamedDataSlot(&q ...

  7. EFCore.MySql当模型遇到int[]怎么办

    我使用的是Pomole.EntityFrameworkCore.MySql 需要将旧项目中的excels表转成实体,其中有一列是json格式的int[] 当遇到第一张表的时候,我使用了这样的方法来读取 ...

  8. css - bootstrap3下拉菜单点击之后怎么改变背景颜色?

    css添加 .navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:focus, .n ...

  9. 读书笔记(05) - 事件 - JavaScript高级程序设计

    HTML依托于JavaScript来实现用户与WEB网页之间的动态交互,接收用户操作并做出相应的反馈,而事件在此间则充当桥梁的重要角色. 日常开发中,经常会为某个元素绑定一个事件,编写相应的业务逻辑, ...

  10. PPT-常用快捷键

    Ctrl+Shift+C   复制文本格式 Ctrl+Shift+V   粘贴文本格式 Ctrl+B 应用粗体格式Ctrl+U 应用下划线Ctrl+l 应用斜体格式 全选  Ctrl + A 光标之后 ...