一.概述

  在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资料

最新文章

  1. iOS开发CoreGraphics核心图形框架之一——CGPath的应用
  2. JAVA设计模式--工厂方法模式
  3. 连接池技术 Connection Pooling
  4. The service cannot be activated because it does not support ASP.NET compatibility
  5. SQL Server:统计数据库中每张表的大小
  6. 获取token,绑定微信号,自定义菜单,事件响应demo
  7. Xenomai 安装准备工作
  8. RHEL 6.3安装(超级详细图解教程)[转载]
  9. Navicat 导入数据报错 --- 1153 - Got a packet bigger than 'max_allowed_packet' bytes
  10. java5 新特性
  11. [数据结构] 成都磨子桥技工学校 Challenge Series
  12. 3 weekend110的job提交的逻辑及YARN框架的技术机制 + MR程序的几种提交运行模式
  13. 一种解决h5页面背景音乐不能自动播放的方案
  14. Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/var/AYXXXXXXXXXXX.pid). 错误解决方法
  15. NOPI读xls文件写到txt中(NPOI系列二)
  16. JS 三目运算符和RETURN
  17. Linux下安装Python3.x和第三方库
  18. 了解与建设有中国特色的Android M&N(Android6.0和7.0新特性分析)
  19. 基于jeesite的cms系统(一):开发环境搭建
  20. Oracle安装和配置Oracle数据库快速指南

热门文章

  1. JavaScript-倒计时效果
  2. 并发编程-concurrent指南-原子操作类-AtomicBoolean
  3. 自定义docker镜像
  4. os.path.join用法
  5. python中的内置函数的思维导图
  6. 虚拟机linux下git clone 报SSL connect error错误
  7. 走近Java之幕后的String
  8. solidity智能合约如何判断地址为0或空
  9. [转载] 管Q某犇借的手写堆
  10. 一个简单的EJB例子