【SignalR全套系列】之在.Net Core 中实现长轮询

微信公众号:趣编程ACE
关注可了解更多的.NET日常实战开发技巧,如需源码 请后台留言 源码;

前文回顾

【SignalR全套系列】之在.Net Core 中实现Server-Send Events消息推送

【SignalR全套系列】之在.NetCore中实现WebSocket双工通信

【SignalR全套系列】之在.Net Core 中实现长轮询


客户端实现
1// 详细代码讲解 见视频2const listen = (cb) => fetch("/listen")3            .then(r => r.text())4            .then(t => {5                cb(t);6                listen(cb);7            });89        listen((e) => console.log(e));
10
11        // fetch     send("hello")
12        const send = (m) => fetch("/send?m=" + encodeURIComponent(m));
服务端实现
1// 创建一个无消息上限通道
2public Startup(IConfiguration configuration)
3{
4   // ....
5   _channel = Channel.CreateUnbounded<string>();
6}
7   private Channel<string> _channel;
1// 设置两个路由节点  一个是客户端 发送节点  一个是监听节点2app.UseEndpoints(endpoints =>3            {4                endpoints.MapControllers();5                endpoints.Map("/listen", async context =>6                 { 7                    // 等待消息通道中有数据可读8                    if(await _channel.Reader.WaitToReadAsync())9                     {
10                         if(_channel.Reader.TryRead(out var data))
11                         {
12                             // 读写数据  返回给客户端
13                             context.Response.StatusCode = 200;
14                             await context.Response.WriteAsync(data);
15                             return;
16                         }
17                     }
18                     context.Response.StatusCode = 200;
19                 });
20
21                endpoints.Map("/send", async ctx => 
22                {
23                    //   /send?m=xxx
24                    if(ctx.Request.Query.TryGetValue("m",out var data))
25                    {
26                        // 获取路由的查询信息
27                        Trace.WriteLine("发送的消息:"+data);
28                        await _channel.Writer.WriteAsync(data); // 推送到消息通道中
29                    }
30                    ctx.Response.StatusCode = 200;
31                });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完美解决ArcGIS10.2和Erdas9.2软件冲突的方法:共存!

用过ArcGIS和Erdas软件的都知道&#xff0c;二者存在着服务的冲突&#xff0c;为了解决共存的问题&#xff0c;笔者曾多次重装系统&#xff0c;但未能如愿以偿。其实不需要相互关闭服务如此麻烦。那如何在安装有arcgis的电脑安装erdas并解决冲突呢&#xff1f;直接上视频教程。…

架构师之路16年精选50篇

2016精选索引&#xff0c;点击标题阅读相关文章。【方法论】《秒杀系统架构优化思路》《分布式ID生成器》《互联网架构&#xff0c;如何进行容量设计》《线程数究竟设多少合理》《单点系统架构的可用性与性能优化》《关于负载均衡的一切》《异构服务器负载均衡及过载保护》《LV…

yii 前后台分离及登陆验证

2019独角兽企业重金招聘Python工程师标准>>> 比较合理的做法其实是分成两个框架来布署&#xff1b;然而这样说法也太绝对。 事实上是针对不同系统&#xff0c;应采用不同的方法。如为CMS系统&#xff0c;则不需很复杂的权限管理&#xff0c;但如果有管理员与会员之分…

双谷人才财务管理(序)

IT是一个迅速发展的行业&#xff0c;教育是一个良心的行业&#xff0c;两者交集——IT培训&#xff0c;在整个市场中占有一个不可或缺的地位。好多大学生&#xff0c;抱怨找不到工作&#xff1b;好多企业找不到合适的程序员&#xff0c;这几年这个问题越来越严重。。。。于是IT…

Android之打开手机系统相册

1、需求 打开系统相册&#xff0c;获取图片进行扫描操作 2、代码实现 Intent pickIntent new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");Ca…

Kibana

2019独角兽企业重金招聘Python工程师标准>>> Kibana是一个基于浏览器页面的Elasticsearch前端展示工具。Kibana全部使用HTML语言和Javascript编写的&#xff0c;查询语法是基于Lucene的查询语法。允许布尔运算符、通配符和字段筛选。注意关键字要大写 全文搜索 在搜…

电脑QQ能登上,网页打不开的解决办法

打开360卫士&#xff0c;在功能大全里选择网络优化&#xff0c;断网急救箱。 可以看到DNS服务异常、浏览器配置异常&#xff0c;点击立即修复。

个人黑名单 抄袭耻辱墙

抄袭耻辱墙 博主抄袭文原文我爱Python数据挖掘https://blog.csdn.net/weixin_38037405/article/details/125862095https://blog.csdn.net/A757291228/article/details/117464313黄埔数据分析https://blog.csdn.net/weixin_39060517/article/details/118024847https://blog.csdn…

快速掌握 ASP.NET 身份认证框架 Identity(一)

推荐关注「码侠江湖」加星标&#xff0c;时刻不忘江湖事ASP.NET Core 内置了一个强大的身份认证框架 Identity&#xff0c;掌握它可以让我们快速开发高安全的身份认证功能&#xff0c;不仅如此&#xff0c;它还是一个基于数据库的用户管理系统&#xff0c;其中包含了大量的辅助…

浅谈大型web系统架构

动态应用&#xff0c;是相对于网站静态内容而言&#xff0c;是指以c/c、php、Java、perl、.net等服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。   大型动态应用…

Android之webview长按超链接类型获取链接文字及url、长按图片链接类型分别获取图片和链接的url

1 、需求 webview长按超链接获取链接文字及urlwebview长按图片链接类型获分别获取图片和链接的url 2、解决办法 1)、设置webview的OnLongClickListener事件,关键代码如下 companion object {const val LINK_TYPE = 1const val IMAGE_LINK_TYPE = 2}var mHandler = object :…

PostgreSQL 统计信息pg_statistic格式及导入导出dump_stat - 兼容Oracle

标签 PostgreSQL , dump_stat , 统计信息 , 导出导入 背景 《PostgreSQL 规格评估 - 微观、宏观、精准 多视角估算数据库性能(选型、做预算不求人)》 EXPLAIN是PG数据库用于输出SQL执行计划的语法&#xff0c; 1、生成的执行计划中包含COST一项。 如果校准了成本因子&#xff0…

PHP: 手把手编写自己的 MVC 框架实例教程

1 什么是MVC MVC模式&#xff08;Model-View-Controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。 …

freemarker 异常处理

SSH2处理方案&#xff1a; freemarker文件如果出错&#xff0c;网站的前台页面会报出很明显的错误-焦黄的背景&#xff0c;血红的文字&#xff0c;很不利于用户体验的。如何修改这个问题呢&#xff1f;首先需要在struts.xml配置文件里添加下面一行代码&#xff1a; 1<consta…

ArcGIS10.8按属性选择中根据关键字like模糊查询方法总结

在实际工作中,通常需要按照某一个或某几个关键字进行模糊查询,已到达快速、准确、高效查询的目的。在ArcGIS中是通过SQL语句,利用关键字like来实现的。例如我们可以借助like快速查询满足以某一个关键字开头,以某一个关键字结尾,或者包含某一个关键字的结果。 在ArcGIS中,…

2021年复盘总结发现了C站博主缺少的赚钱之路

一、 我2021年的六大Flag 其实最开始我是不打算年终总结的&#xff0c;因为2021年我的十大Flag都没有完成&#xff0c;我说出来可能你会嘲笑我&#xff0c;所以我打算还是说出来吧。 这六大Flag如下&#xff1a; C站百万粉百篇实战文其他自媒体平台十万粉公众号一万粉财务自…

五大微信小程序开发IDE深度评测

微信小程序已经内测有一段时间了&#xff0c;笔者本着好奇加学习的心态写了几个小demo&#xff0c;虽然在MINA框架上并没有遇到太多的坑&#xff0c;但官方开发工具实在不敢恭维。 api提示不全&#xff0c;要一个个查api啊&#xff0c;写代码超级慢啊 很多必备的快捷键都没有&…

Maui的学习之路(2)--Mac窗体设置

Maui的学习之路今天是我开启Maui学习之路的第二天&#xff0c;我不是很高兴又能水一篇文章&#xff0c;我只能说这文章真好水。话不多说&#xff0c;我们进入正题&#xff0c;昨天解决了Windows下TitleBar以及窗体大小的问题&#xff0c;今天同样的问题&#xff0c;在Mac上又要…

Android之靠谱的Activity从底部向上弹出,finish从顶部向下消失(不黑屏)

1 、需求 要求Activity从底部向上弹出,finish从顶部向下消失(不黑屏) 2、解决办法 准备3个动画xml文件 app_bottom_in.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/andro…

ArcGIS10.8中如何获取线状、面状数据的折点,并计算折点坐标?

如下图所示为面状要素,ArcGIS10.8中如何获取线状和面状数据的折点(起点、终点、中点、端点),并计算折点的坐标(X,Y,Z,M)? 下图所示为线状(Polyline)和面状(Polygon)要素的起点、终点和折点的示意图。