服务器推送消息到客户端 SignalR 弹出消息

1.先来看一下成果:

打开多个客户端,输入不同的用户名:

用xuanwuziyou用户给pet用户发送消息,点击发送之后,pet用户即收到新消息弹出提示:


2.技术:Asp.net的SignalR,详情见官网  http://www.asp.net/signalr
http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-getting-started-with-signalr-20
使用环境:VS2013 WebForm项目。
3.新建一个WebApplication的空项目,项目结构:


4.步骤1:添加ChatHub.cs类,如下:


ChatHub.cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;

namespace SignalRChat
{
    public class ChatHub : Hub
    {

        public void SendEmail(string receiver, string sender, string message)
        {
            //调用广播方法推送消息到客户端
            Clients.All.broadcastMessage(receiver, sender, message);
        }
    }
}
步骤2: 添加Startup.cs类,如下:

Startup.cs代码:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(SignalRChat.Startup))]

namespace SignalRChat
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            app.MapSignalR();
        }
    }
}

添加上这两个类,那么项目所需要的Scripts文件和引用就会自动添加进来。

步骤3:添加一个Html页叫做“邮件通知.html”,内容如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>邮件通知</title>
    <script src="Scripts/jquery-1.10.2.min.js"></script>
    <script src="/Scripts/jquery.signalR-2.0.0.js"></script>
    <script src="/signalr/hubs"></script>
    <script>
        var username;
        $(function () {
            $("#notify").hide();

            $("#submit").click(function () {
                username = $("#username").val();
                $("#tishi").html("当前用户: " + username);
                $("#shuru").hide();
                $("#username").hide();
                $("#submit").hide();
            });

            var chat = $.connection.chatHub;
            chat.client.broadcastMessage = function (receiver, sender, message) {//显示从服务端收到的信息
                if (username == receiver) {
                    $("#sender").text(sender);
                    $("#receiveMsg").text(message);
                    $("#notify").slideDown();
                }
            };

            $.connection.hub.start().done(function () {//发送信息到服务端

                $('#sendmsg').click(function () {
                    chat.server.sendEmail($("#receiver").val(), username, $("#msg").val());
                });

            });

            $("#cancle").click(function () {
                $("#notify").slideUp();
            });
        });
    </script>
</head>
<body>
    <h1>邮件通知</h1>
    <label id="shuru">请输入用户名:</label>
    <input type="text" id="username" />
    <input type="button" id="submit" value="确定" />
    <br /><label id="tishi"></label>
    <hr />
<div>
    收件人:<input type="text" id="receiver" />
    <br />内容:<input type="text" id="msg" />
    <br /><br /><input type="button" id="sendmsg" value="发送"/>
</div>

    <p></p>
    <div id="notify" style="width:300px;height:140px;float:right;margin-bottom:10px;border:solid;background-color:yellow;">
        <br />
        <br />
        新消息来自:  <span id="sender"></span><br />
        内容:<span id="receiveMsg"></span>
        <br /><br /><br />
        <input type="button" id="cancle" value="我知道啦" style="float:right"/>
    </div>

</body>
</html>
5.然后就可以生成项目并运行了。

6.讲解:ChatHub.cs中的SendEmail(string receiver, string sender, string message)方法由我们自己编写,

这个方法在前端的javascript中被调用了:

$.connection.hub.start().done(function () {//发送信息到服务端

                $('#sendmsg').click(function () {
                    chat.server.sendEmail($("#receiver").val(), username, $("#msg").val());
                });

            });
只是把SendEmail调用时写作sendEmail,即第一个字母小写。这个方法在当singalr准备好之后,
在前端调用后台的方法把数据广播出去。

chat.client.broadcastMessage = function (receiver, sender, message) {//显示从服务端收到的信息
                if (username == receiver) {
                    $("#sender").text(sender);
                    $("#receiveMsg").text(message);
                    $("#notify").slideDown();
                }
            };
这个方法,正是客户端收到了服务器广播发来的数据之后调用的方法,收到的参数正是我们在
SendEmail中规定传送的参数。本程序中把收到的信息弹出给相应的用户。

就这样,实现了信息的实时推送,也就是服务器端主动向客户端推送消息的方式。结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值