距离上一篇文章已经过去了一个多月的时间了,期间身体抱恙,没有精力写东西,计划的聊天应用进展也异常的缓慢。这两天搞出点雏形来,放出来给大家玩玩吧。其实还有很多好玩的内容没有做出来,只实现了单纯的聊天功能和(哔——保密)功能,说实话可玩性没那么大,闲来无事可以尝试一下,吹吹水扯扯淡。
先上链接:10-k.cn(已废弃) 这个域名其实是之前搞IM的时候买的(还记得吗?巨款!),至于是什么意思,点进去你就知道啦。
下面开始具体的技术细节。
Blazor
自从开始拥抱开源后,微软就不断搞出一些跨界的东西出来。从.NET到跨平台的.NET Core(中间还走了一些弯路,.NET Core -> .NET Standard -> .NET 5,傻傻分不清楚),收购Xamarin并开源,包括现在正在进行中的Xamarin进化版——MAUI,都体现着微软想要多端开花的想法。
Blazor同样如此。原本Blazor只是一个实验性的项目,利用WebAssembly将.NET搬到浏览器上,结合Razor的页面渲染能力,搞出一个.NET版的前端框架(类似Angular/React/Vue)。搞着搞着发现这路子可行,于是慢慢的变成了正式的项目并加以推广。
我在最初的实验版本的时候就尝试过Blazor,那时候一些基础的功能其实已经出来了,包括现在官方给的demo,其实和最初相比一直就没变过。当时最大的问题是,WebAssembly版的.NET Runtime体积太大了,首次加载的时候需要漫长的等待,这无疑是致命的。但在最新的版本里,Runtime的体积已经大大缩小,并且在编译的时候提前进行了gzip和Brotli压缩,使得应用加载的时间显著缩短,满足生产项目的使用需求了。
Blazor的出现为.NET后端开发人员进行前端应用的开发提供了一种可能,但前提是必须已经对前端技术有所了解。Blazor只是提供了熟悉的语法和技术栈,在.NET和浏览器之前搭建了一个桥梁,但应用的本质还是要落到前端上的。
本次的聊天应用的前端页面就是建立在Blazor上的,同时本着学习的目的,采用了Ant Design这个UI框架的Blazor移植版本——Ant Design Blazor。感谢开源的小伙伴们。另外说到开源,我最近又有一些新的感悟,留待下一篇文章细说。
SignalR
SignalR是一个提供实时双向通信能力的组件。所谓双向,就是客户端和服务端都可以向对方发送消息。很多人会有一个误解,认为SignalR就是对WebSockets进行了一下封装,其实不然。WebSockets是SignalR的首选通信方式,但根据应用场景和网络环境等的不同,SignalR也会选择性的自动切换到服务端发送事件(Server-Sent Events)或者长轮询(Long Polling)的方式上。
SignalR使用了hub这样一个东西来支持客户端和服务端之间的通信,可以认为它是一个消息集散中心。客户端和服务端通过互相调用对方的方法的方式来进行消息的传递。
SignalR可以利用ASP.NET Core身份验证来识别每一个连接(Connection)所对应的用户,继而可以对hub及其中的方法进行权限控制。
本次的聊天应用使用了SignalR进行聊天消息的传递,出于简单考虑,暂时没有做身份验证,即没有账号系统。后续如果有时间精力持续完善的话,可能考虑搞个简单的用户系统,或者接入微信进行账号绑定和自动登录。
其他
因为不是什么正儿八经的业务系统,所以服务端没有使用关系型数据库进行持久化,配置和消息之类的东西全都丢到Redis里,每天0点的时候会全部清除掉。另外为了执行一些定时性的任务,还引入了Quartz,当然也是没有持久化的:)。
因为这个应用也是个实验性的东西,所以虽然目前一共也没写多少代码,但还是耗费了一些时间的。时间是个好东西啊,最近越来越感觉时间不够用了。
就这样吧。