一.概述

  在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 中的 WebSocket 支持

    ASP.NET Core SignalR 简介

    WebSocket资料

asp.net core系列 70 即时通迅-WebSocket+Redis发布订阅的更多相关文章

  1. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

  2. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  3. Asp.net Core 系列之--3.领域、仓储、服务简单实现

    ChuanGoing 2019-11-11  距离上篇近两个月时间,一方面时因为其他事情耽搁,另一方面也是之前准备不足,关于领域驱动有几个地方没有想通透,也就没有继续码字.目前网络包括园子里大多领域驱 ...

  4. 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 ...

  5. 1.1专题介绍「深入浅出ASP.NET Core系列」

    大家好,我是IT人张飞洪,专注于.NET平台十年有余. 工作之余喜欢阅读和写作,学习的内容包括数据结构/算法.网络技术.Linux系统原理.数据库技术原理,设计模式.前沿架构.微服务.容器技术等等…… ...

  6. asp.net core系列 30 EF管理数据库架构--必备知识 迁移

    一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...

  7. asp.net core系列 40 Web 应用MVC 介绍与详细示例

    一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...

  8. asp.net core系列 39 Web 应用Razor 介绍与详细示例

    一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...

  9. asp.net core系列 38 WebAPI 返回类型与响应格式--必备

    一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...

随机推荐

  1. CSDN,CNBLOGS博客文章一键转载插件(转载测试)

    插件地址: https://greasyfork.org/zh-CN/scripts/381053-csdn%E5%8D%9A%E5%AE%A2%E6%96%87%E7%AB%A0%E8%BD%AC% ...

  2. Ubuntu 16.4-desktop系统安装显卡CUDA具体步骤!

    1.禁用nouveau驱动(切换至tty界面) sudo vim /etc/modprobe.d/blacklist.conf 在文本最后添加:blacklist nouveau options no ...

  3. python 实现一个计算器功能

    #s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )' #第 ...

  4. 使用GDAL实现DEM的地貌晕渲图(一)

    目录 1. 原理 1) 点法向量 2) 日照方向 (1) 太阳高度角和太阳方位角 (2) 计算过程 3) 晕渲强度 2. 实现 3. 参考 @ 1. 原理 以前一直以为对DEM的渲染就是简单的根据DE ...

  5. Java第五次作业--面向对象高级特性(抽象类与接口)

    Java第五次作业--面向对象高级特性(抽象类与接口) (一)学习总结 1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结. 2.汽车租赁公司,出租汽车 ...

  6. spring mvc重定向问题

    在页面提交时中,路径应该使用“/默认上下文/controller路径”,在controller重定向中,应该使用“/controller路径”,不加上下文.

  7. Creating a Manager for Multiple Threads_翻译

    The previous lesson showed how to define a task that executes on a separate thread. If you only want ...

  8. 预学第三天:Ge常用t快捷键,码云,Git使用

    目录 Get常用快捷键 码云及Git的使用 Get常用快捷键 git init #创建一个本地的仓库 **gie add test.txt #指定文件添加 ***git add . #当前文件夹下所有 ...

  9. 【题解】导游-C++

    Description 宁波市的中小学生们在镇海中学参加程序设计比赛之余,热情的主办方邀请同学们参观镇海中学内的各处景点,已 知镇海中学内共有n处景点.现在有n位该校的学生志愿承担导游和讲解任务.每个 ...

  10. 【算法•日更•第十九期】动态规划:RMQ问题

    ▎前言 首先先来说一下RMB是什么,当然是人民币啦. 今天我们要学的这个东西不一般,叫做RMQ问题,那么它和RMB有什么关系呢?待小编细细说来. ▎前置技能:动态规划 不会的同志请戳这里迅速了解动态规 ...