首页 > 其他分享 >使用SignalR实现简单聊天室和推送广告

使用SignalR实现简单聊天室和推送广告

时间:2023-01-22 10:11:07浏览次数:40  
标签:聊天室 Task string await SignalR 广告 推送 public

所需材料:一个SignalR处理程序、一个前端页面、一个后端推广告服务、配置。

1、SignalR继承自Hub,里面有一个群发消息的方法,可以控制访问权限。

    /// <summary>
    /// 演示用
    /// </summary>
    public class SRDemo : Hub
    {
        //[Authorize]//此属性可禁止没有token的用户使用websocket,因为Program中已经配置了相关限制
        /// <summary>
        ///群发信息
        /// </summary>
        /// <returns></returns>
        public async Task SendMessage(string user, string message)
        {
            string connId = this.Context?.ConnectionId ?? "";
            string msg = $"{connId}:{user}:{DateTime.UtcNow}:{message}";
            if (Clients != null)
            {
                await Clients.All.SendAsync("ReceiveMessage", user, msg);
            }
        }
}

 2、前端页面、所需js文件用添加客户端库的方式添加。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <div class="container">
        <div class="row"> </div>
        <div class="row">
            <div class="col-2">User</div>
            <div class="col-4"><input type="text" id="userInput" /></div>
        </div>
        <div class="row">
            <div class="col-2">Message</div>
            <div class="col-4"><input type="text" id="messageInput" /></div>
        </div>
        <div class="row"> </div>
        <div class="row">
            <div class="col-6">
                <input type="button" id="sendButton" value="Send Message" />
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-12">
            <hr />
        </div>
    </div>
    <div class="row">
        <div class="col-6">
            <ul id="messagesList"></ul>
        </div>
    </div>
    <script src="js/signalr/dist/browser/signalr.min.js"></script>
    <script src="js/chat.js"></script>
</body>
</html>

 3、后端推广告服务,继承BackgroundService,每2秒推一条信息。

    /// <summary>
    /// 后台服务的demo
    /// </summary>
    public class HSDemo : BackgroundService
    {
        /// <summary>
        /// demo 需要在program.cs中注册为sington
        /// </summary>
        /// <param name="stoppingToken"></param>
        /// <returns></returns>
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            //连接Signal服务
            var hubConnection = new HubConnectionBuilder().WithUrl("https://localhost:7289/Hubs/Demo").Build();
            await hubConnection.StartAsync();

            try
            {
                while (!stoppingToken.IsCancellationRequested)
                {
                    await Task.Delay(2000);
                    try
                    {
                        await hubConnection.InvokeAsync("SendMessage", "server", Guid.NewGuid().ToString());

                    }
                    catch (Exception ex) { continue; }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }

 4、配置Program.cs

//配置托管服务
void ConfigureHostedService()
{
    builder.Services.AddHostedService<HSDemo>();//此为演示,定时向Signal聊天者推广告,默认应关闭
}

  

//映射SignalR
void MapSignalR()
{
    app.MapHub<SRDemo>("/Hubs/Demo");
}

  可能还需要跨域

app.UseCors();

  结束

 

标签:聊天室,Task,string,await,SignalR,广告,推送,public
From: https://www.cnblogs.com/tudou365/p/17064292.html

相关文章

  • Prometheus Pushgateway数据推送失败(windows)
    环境windows10pushgatewayprometheus问题启动pushgateway及Prometheus后,通过curl往pushgateway推送数据出现以下问题C:\Users\Jruing>echo'cpu2'|curl--da......
  • 如何使用 JumpServer 推送资产的系统用户?
    概述本篇文章主要介绍在纳管的资产没有某个系统用户的情况下如何通过JumpServer进行创建并推送到相应的服务器上。文章可以分为Linux系统用户推送和Windows系统用户推......
  • Python邮箱推送
    利用python进行邮箱推送可以配和爬虫使用,也可以监控github上面CVE等一个基于Python的邮箱推送脚本需要有一个邮箱授权码不知道哪里获取可以百度就不多详细的描述了成......
  • 批量推送工单
     1.se38=>zpp_078=>F8    Excel复制多行工单号  F8两次......
  • 客服系统即时通讯IM开发(五)网站实时向在线访客推送消息【唯一客服】网站在线客服系统
    我在自己的在线客服系统中实现了主动邀请在线访客聊天的功能虽然前面四篇已经实现了大部分了,现在还是要简介下原理:在网站中实时向在线访客推送消息可以使用WebSockets......
  • 【FAQ】推送服务常见问题及解决方案
    一、推送成功收不到消息,推送返回:{"message":"success","requestID":"1523868*****2842718","resultcode":0}排查步骤:1、网络不稳定,切换稳定网络进行测试;2、检查手机是否......
  • Apache MiNa 实现多人聊天室
    ​开发环境:System:WindowsJavaSDK:1.6IDE:eclipse、MyEclipse6.6开发依赖库:Jdk1.4+、mina-core-2.0.4.jar、slf4j-api-1.5.11.jar、slf4j-log4j12-1.5.11.jar​​http://hoojo......
  • NETCORE + VUE + SignalR 消息通信
     NETCORE+VUE+SignalR消息通信  分组通信:https://blog.csdn.net/qbc12345678/article/details/125215711 一.创建Net6WebApi项目NETCORE.TSignalR1.......
  • 推送自研包到python仓库
    环境Python版本:3.6.8仓库:JFrogArtifactory步骤包制作https://zhuanlan.zhihu.com/p/37987613.pypirc文件在$home目录下创建.pypirc文件从Artifactory平......
  • java实现微信公众号消息推送
    1.打开[(https://push.ggt1024.com)],微信扫码登录2.点击java生成代码复制3.在pom.xml中添加依赖<dependency><groupId>com.squareup.okhttp3</groupId>......