zoukankan      html  css  js  c++  java
  • 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 中的 WebSocket 支持

        ASP.NET Core SignalR 简介

        WebSocket资料

  • 相关阅读:
    [GXYCTF2019]BabyUpload
    [GYCTF2020]Blacklist
    [极客大挑战 2019]HardSQL
    PHP实现MVC框架路由功能模式
    色环电阻的阻值识别
    python的内存回收机制
    配置Openfiler做ISCS实验
    windows server 2008r2 在vmware里自动关机
    VMware Workstation网络修改vlan id值
    linux的服务自动启动的配置
  • 原文地址:https://www.cnblogs.com/MrHSR/p/11323724.html
Copyright © 2011-2022 走看看