随笔分类 -  C#.Net

摘要:在多台服务器组成的分布式环境中,我们可以采用黏性会话或者禁用协商的方式来保证来自同一个客户端的请求被同一台服务器处理,但是在分布式环境中,还有其他问题需要解决。 假设聊天室程序被部署在两台服务器上,客户端1、2连接到了服务器A上的ChatRoomHub,而客户端3、4连接到了服务器B上的ChatRo 阅读全文
posted @ 2022-09-28 15:53 龙猫飞起 阅读(1151) 评论(0) 推荐(0)
摘要:1.推送方式 SignalR其实并不只是对WebSocket的封装,它支持多种服务器推送的实现方式,包括WebSocket、服务器发送事件(server-sent events)和长轮询。 SignalR的JavaScript客户端会先尝试用WebSocket连接服务器;如果失败了,它再用服务器发送 阅读全文
posted @ 2022-09-28 11:55 龙猫飞起 阅读(1435) 评论(0) 推荐(0)
摘要:SignalR的介绍 WebSocket 在传统的HTTP中,只能客户端主动向服务器端发起请求,服务器端无法主动向客户端发送消息。有的业务场景下,我们需要服务器端主动向客户端发送消息,比如Web聊天室、OA系统、站内消息等。 为了实现服务器端向客户端推送消息,在2008年诞生了WebSocket协议 阅读全文
posted @ 2022-09-27 21:25 龙猫飞起 阅读(3754) 评论(0) 推荐(1)
摘要:Swagger中默认没有提供设置自定义HTTP请求报文头的方式,因此对于需要传递Authorization报文头的接口,调试起来很麻烦。我们可以通过对OpenAPI进行配置,从而让Swagger中可以发送Authorization报文头。 我们需要修改Program.cs的AddSwaggerGen 阅读全文
posted @ 2022-09-27 13:56 龙猫飞起 阅读(1279) 评论(0) 推荐(0)
摘要:.NET封装了对于JWT的操作,让我们在程序中使用JWT进行鉴权和授权更简单。 ASP.NET Core中使用封装的JWT 第1步,我们先在配置系统appsettings.json中配置一个名字为JWT的节点,并在节点下创建SigningKey、ExpireSeconds两个配置项,分别代表JWT的 阅读全文
posted @ 2022-09-27 11:39 龙猫飞起 阅读(862) 评论(0) 推荐(1)
摘要:实现用户登录功能的经典做法是用Session,但是在前后端分离、分布式环境下已经不适应了,而现在我们倾向于采用JWT代替Session实现登录。 JWT全称是JSON web token,它是使用JSON格式来保存令牌信息的。JWT机制不是把用户的登录信息保存在服务器端,而是把登录信息(也叫作令牌) 阅读全文
posted @ 2022-09-21 23:18 龙猫飞起 阅读(966) 评论(0) 推荐(0)
摘要:在一个系统中,不是所有功能都能被自由地访问的,比如有的功能需要注册用户才能访问,有的功能需要VIP用户才能访问。针对资源的访问限制有两个概念:Authentication与Authorization,即鉴权与授权。 Authentication:用来对访问者的用户身份进行验证; Authorizat 阅读全文
posted @ 2022-09-21 21:45 龙猫飞起 阅读(1205) 评论(2) 推荐(1)
摘要:Task是一个更高级的抽象概念,它代表了一个并发操作,而该操作并不一定依赖线程来完成。Task是可以组合的(可以将它们通过延续(continuation)操作串联在一起)。它们可以使用线程池减少启动延迟,也可以通过TaskCompletionSource采用回调的方式避免多个线程同时等待I/O密集型 阅读全文
posted @ 2022-09-13 15:21 龙猫飞起 阅读(1998) 评论(0) 推荐(0)
摘要:线程是一个可以独立执行的执行路径。 **每一个线程都运行在一个操作系统进程中。**这个进程提供了程序执行的独立环境。 在单线程程序中,进程中只有一个线程运行,因此线程可以独立使用进程环境。而在多线程程序中,一个进程中会运行多个线程。它们共享同一个执行环境(特别是内存)。这在一定程度上说明了多线程的作 阅读全文
posted @ 2022-09-13 11:20 龙猫飞起 阅读(2538) 评论(0) 推荐(1)
摘要:.NET Core在System.Collections.Concurrent命名空间下提供了线程安全的集合: | 并发集合 | 非并发等价集合 | | | | | ConcurrentStack<T> | Stack<T> | | ConcurrentQueue<T> | Queue<T> | | 阅读全文
posted @ 2022-09-08 11:50 龙猫飞起 阅读(1202) 评论(0) 推荐(0)
摘要:任务并行是PFX中最底层的并行化方式。相关的类定义在System.Threading.Tasks命名空间,其中包括: Task:管理一个工作单元; Task<TResult>:管理一个带有返回值的工作单元; TaskFactory:创建任务; TaskFactory<TResult>:创建具有指定返 阅读全文
posted @ 2022-09-07 17:32 龙猫飞起 阅读(1445) 评论(0) 推荐(0)
摘要:1.[ThreadStatic]特性 实现线程本地存储最简单的方式是在静态字段上附加ThreadStatic特性: [ThreadStatic] static int _x; 这样,每个线程都会得到一个_x的独立副本。 但是,[ThreadStatic]并不支持实例字段(它对实例字段并不会产生任何作 阅读全文
posted @ 2022-09-06 11:00 龙猫飞起 阅读(609) 评论(0) 推荐(1)
摘要:PFX在Parallel类中提供了三个静态方法作为结构化并行的基本形式: Parallel.Invoke方法:并行执行一组委托。 Parallel.For方法:执行与C# for循环等价的并行方法。 Parallel.ForEach方法:执行与C#foreach循环等价的并行方法。 这三个方法都会阻 阅读全文
posted @ 2022-09-05 17:23 龙猫飞起 阅读(1391) 评论(0) 推荐(1)
摘要:PLINQ可以自动并行化本地LINQ查询。易于使用是PLINQ的优势,因为它将工作划分和结果整理的任务交给了.NET Core。 要使用PLINQ,只需直接在输入序列上调用AsParallel()方法,而后和先前一样编写普通的LINQ查询即可。 例如,以下范例列出了3~100 000之间的所有素数, 阅读全文
posted @ 2022-09-02 16:01 龙猫飞起 阅读(674) 评论(0) 推荐(0)
摘要:**通过编程发挥多核或多处理器优势的方式称为并行编程。**它是多线程这个更宽泛概念的一个子集。 多线程API和以下可以发挥多核处理器能力的各种结构: 并行LINQ(PLINQ) Parallel类 任务并行结构 并发集合 这些类型一般统称为并行框架(Parallel Framework,PFX)。 阅读全文
posted @ 2022-09-01 16:10 龙猫飞起 阅读(354) 评论(0) 推荐(0)
摘要:如果需要定期重复执行一些方法,最容易的方式就是使用定时器。相比以下方式,定时器既方便使用又能高效地利用内存和资源。 new Thread(delegate () { while (enabled) { DoSomeAction(); Thread.Sleep(TimeSpan.FromHours(2 阅读全文
posted @ 2022-09-01 11:11 龙猫飞起 阅读(1910) 评论(0) 推荐(0)
摘要:最简单的信号发送结构是事件等待句柄(注意它和C#的事件是无关的)。事件等待句柄有三种实现:AutoResetEvent、ManualResetEvent(Slim)和CountdownEvent。前两种基于通用的EventWaitHandle类,它们继承了基类的所有功能。 AutoResetEven 阅读全文
posted @ 2022-09-01 10:38 龙猫飞起 阅读(1711) 评论(0) 推荐(1)
摘要:非排他锁目的是限制并发性。 信号量 信号量(semaphore)就像俱乐部一样:它有特定的容量,还有门卫保护。在满员之后,就不允许其他人进入了,人们只能在外面排队。只有当有人离开时,才准许另外一个人进入。信号量的构造器需要至少两个参数:即俱乐部当前的空闲容量以及俱乐部的总容量。 容量为1的信号量与M 阅读全文
posted @ 2022-08-31 15:03 龙猫飞起 阅读(130) 评论(0) 推荐(0)
摘要:排他锁结构有三种:lock语句、Mutex和SpinLock。 **其中lock是最方便最常用的结构。**而其他两种结构多用于处理特定的情形:Mutex可以跨越多个进程(计算机范围锁)。SpinLock可用于实现微优化,可以在高并发场景下减少上下文切换。 lock语句 先看如下代码: class T 阅读全文
posted @ 2022-08-30 15:49 龙猫飞起 阅读(770) 评论(0) 推荐(0)
摘要:字典是一种集合,其包含的元素均为键值对。字典通常用于查找或用作排序列表。 框架通过IDictionary和IDictionary<TKey, TValue>接口以及一系列通用的字典类定义了标准字典协议。 IDictionary<TKey, TValue> IDictionary<TKey, TVal 阅读全文
posted @ 2022-08-30 11:08 龙猫飞起 阅读(1787) 评论(0) 推荐(0)