SignalR 实现简单的【私聊】功能

SignalR实现私聊的方法:
image.png
详情:将SignalR用户映射到连接

创建项目

1.创建项目 以 .NET Framework 为例
image.png

2.添加 Nuget 包
image.png
添加 如图所示 的包
image.png

添加 Hub类

image.png

继承 Hub类

image.png

创建私聊用的映射类

image.png

添加 StartUp类

image.png

编写 前端代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <h1>SignalR Demo One</h1>
    <input type="text" id="connectionid" value="" placeholder="输入连接ID" />
    <input type="button" id="send" value="发送" />
    <hr />
    <input type="text" id="uid" value="" placeholder="输入用户ID" />
    <input type="button" id="sendbyUid" value="发送" />
</body>
</html>
<script src="Scripts/jquery-3.4.1.js"></script>
<script src="Scripts/jquery.signalR-2.2.2.js"></script>
<script src="Scripts/jquery.cookie.min.js"></script>
<script src="/signalr/hubs"></script>
<script>
    $(function () {

        //设置cookie 保存UID
        //sessionStorage.setItem('userId', randomString(12));
        $.cookie('userId', randomString(12), { expires: 7 });

        //注册服务中心
        var connection = $.connection.myHub;

        //注册客户端方法 由服务端调用
        connection.client.GetStartMsg = function (msg) {
            console.log(msg);
        };

        connection.client.SendMsg = function (msg) {
            console.log(msg);
            //alert(msg);
        };

        connection.client.SendMsgByUid = function (msg) {
            console.log(msg);
        };

        //绑定事件
        $("#send").click(function () {
            //通过connectionID发送
            connection.server.sendMsgByConnectionId($("#connectionid").val());
        });

        $("#sendbyUid").click(function () {
            //通过UID发送
            connection.server.sendMsgByUid($("#uid").val());
        });

        //启动连接
        $.connection.hub.start()
            .done(function () {
                console.log("OK!");
                connection.invoke('getConnectionId')
                    .then(function (connectionId) {
                        sessionStorage.setItem('conectionId', connectionId);
                        // Send the connectionId to controller                        
                    }).catch(err => console.error(err.toString()));;
                
                connection.server.startMsg();

            })
            .fail(function () {
                console.log("ERROR!");
            });

        //获取随机字符当做UID
        function randomString(e) {
            e = e || 32;
            var t = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678",
                a = t.length,
                n = "";
            for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a));
            return n
        };
    });
</script>

演示

SignalR.gif

源码

源码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值