asp.net core系列 70 即时通迅-WebSocket+Redis发布订阅
一.概述
在asp.net core 中可以用WebSocket 或asp.net core SignalR来开发即时通迅。在项目中由于开发前后端分离,对于SignalR前端技术人员不想依赖juqery和SignalR.js包,后端确定使用WebSocket 来实现。对于asp.net core有自带的app.UseWebSockets()中间件,但是使用IIs做为web代理服务器时,需要在windows系统添加程序iis配置websocket才能使用websocket通讯。于是项目引用了一个开源包Fleck。
Fleck是对C#Websocket的实现,程序内部使用了System.Net.Sockets类来实现Websocket,不依赖于任何目标框架。 Fleck使用介绍 :https://github.com/statianzo/Fleck
下面是msdn文档原话:
对于大多数应用程序,我们建议使用 SignalR,而不是原始 Websocket。 SignalR 可为 Websocket 不可用的环境提供传输回退。 它还可提供简单的远程过程调用应用模型。 并且在大多数情况下,与使用原始 Websocket 相比,SignalR 没有显著的性能缺点。
WebSocket客户端支持:
|
浏览器 |
支持情况 |
|
Chrome |
Chrome version 4+支持 |
|
Firefox |
Firefox version 5+支持 |
|
IE |
IE version 10+支持 |
|
Safari |
IOS 5+支持 |
|
Android Brower |
Android 4.5+支持 |
二.项目中即时通迅实现架构
在我业务项目中实现的流程是:第三方接口发送数据过来,使用redis进行发布消息, 在web端进行消息订阅, 把订阅的消息通过websocket发送到前端站点,前端界面进行局部数据刷新展示,已解决前端即时消息的展示。

三. 项目实现
3.1相关包
(1) 发布订阅redis包:Install-Package StackExchange.Redis -Version 2.0.601
(2) websocket引用 Fleck 包。Install-Package Fleck -Version 1.1.0
3.2 fleck案例
关于fleck的websocket的参考如下:https://github.com/statianzo/Fleck/tree/master/src/Samples/ConsoleApp

3.3 项目中演示效果
(1) 使用web来做websocket宿主,websocket地址为:ws://127.0.0.1:8181,如下所示websocket服务已启动


(2) 启动前端界面,下图可以看到websocket已连接

前端页面连接websocket服务关键代码: window.ws = new wsImpl('ws://127.0.0.1:8181',"FootballGoalScore"); 具体参考fleck的websocket示例。
(3) 控制台程序使用redis模拟发布信息, web端redis订阅消息,再通过websocket服务推送消息到前端页面,通过下图可以看到消息已即时传到

public void FootballScore(IWebSocketConnection websocke)
{
//redis先订阅消息
_subscriber.Subscribe("queue2", (msg) =>
{
//websocket服务推送消息
websocke.Send(msg);
_lLogger.Debug("消息已发送!");
});
下面是模拟第三方接口消息达到后,使用redis来发布消息,发布后web端redis自动订阅。
static void Main(string[] args)
{
ISubscriber subscriber = new GFRedisSubscriber();
//足球比分
subscriber.Publish("queue2", "1:0");
//即时欧指
subscriber.Publish("queue1", "1.69|3.30|3.78");
Console.ReadLine();
}
参考文献:
asp.net core系列 70 即时通迅-WebSocket+Redis发布订阅的更多相关文章
- 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)
黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- Asp.net Core 系列之--3.领域、仓储、服务简单实现
ChuanGoing 2019-11-11 距离上篇近两个月时间,一方面时因为其他事情耽搁,另一方面也是之前准备不足,关于领域驱动有几个地方没有想通透,也就没有继续码字.目前网络包括园子里大多领域驱 ...
- Ajax跨域问题及解决方案 asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS) c#中的Cache缓存技术 C#中的Cookie C#串口扫描枪的简单实现 c#Socket服务器与客户端的开发(2)
Ajax跨域问题及解决方案 目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP ...
- 1.1专题介绍「深入浅出ASP.NET Core系列」
大家好,我是IT人张飞洪,专注于.NET平台十年有余. 工作之余喜欢阅读和写作,学习的内容包括数据结构/算法.网络技术.Linux系统原理.数据库技术原理,设计模式.前沿架构.微服务.容器技术等等…… ...
- asp.net core系列 30 EF管理数据库架构--必备知识 迁移
一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...
- asp.net core系列 40 Web 应用MVC 介绍与详细示例
一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...
- asp.net core系列 39 Web 应用Razor 介绍与详细示例
一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...
- asp.net core系列 38 WebAPI 返回类型与响应格式--必备
一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...
随机推荐
- 每天学点node系列-fs文件系统
好的代码像粥一样,都是用时间熬出来的. 概述 文件 I/O 是由简单封装的标准 POSIX 函数提供的. 通过 require('fs') 使用该模块. 所有文件系统操作都具有同步和异步的形式. 异步 ...
- Python爬虫入门:爬取pixiv
终于想开始爬自己想爬的网站了.于是就试着爬P站试试手. 我爬的图的目标网址是: http://www.pixiv.net/search.php?word=%E5%9B%9B%E6%9C%88%E3%8 ...
- 西门子PLC中各个组织块OB作用(OB1、OB100……)
1.自由循环组织块OB1 S7 CPU启动完成后,操作系统循环执行OB1,OB1执行完成后,操作系统再次启动OB1.在OB1中可以调用FB.SFB.FC.SFC等用户程序使其循环执行.除OB90以外 ...
- 转: windows系统下mysql出现Error 1045(28000) Access Denied for user 'root'@'localhost'
windows系统下mysql出现Error 1045(28000) Access Denied for user 'root'@'localhost' 转自 http://zxy5241.space ...
- .Net Core 使用百度UEditor编辑器
一.准备文件 1. 下载UEditor官方版本.删除其中后端文件.保留后端文件夹中的config.json文件 2. 在NuGet管理器中搜索UEditorNetCore,拿到项目地址,下载源码 下载 ...
- Jenkins构建部署jar/war后,服务无法在后台持续运行的解决方案
jenkins中自动构建helpcenter.jar文件,然后以在server上以shell脚本的形式启动jar服务.jenkins构建后,手动执行sh脚本,服务启动异常.但jenkins结合shel ...
- vue组件间通信六种方式(完整版)
本文总结了vue组件间通信的几种方式,如props. $emit/ $on.vuex. $parent / $children. $attrs/ $listeners和provide/inject,以 ...
- [Noi2002]Savage 题解
[Noi2002]Savage 时间限制: 5 Sec 内存限制: 64 MB 题目描述 输入 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci ...
- 最全面阐述WebDataBinder理解Spring的数据绑定
每篇一句 不要总问低级的问题,这样的人要么懒,不愿意上网搜索,要么笨,一点独立思考的能力都没有 相关阅读 [小家Spring]聊聊Spring中的数据绑定 --- DataBinder本尊(源码分析) ...
- 手写 Spring
手写 Spring 不多说,简历装 X 必备.不过练好还是需要求一定的思维能力. 一.整体思路 思路要熟练背下来 1)配置阶段 配置 web.xml: XDispatchServlet 设定 init ...