在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/Fleckgit
下面是msdn文档原话:github
对于大多数应用程序,咱们建议使用 SignalR,而不是原始 Websocket。 SignalR 可为 Websocket 不可用的环境提供传输回退。 它还可提供简单的远程过程调用应用模型。 而且在大多数状况下,与使用原始 Websocket 相比,SignalR 没有显著的性能缺点。web
WebSocket客户端支持:redis
浏览器windows |
支持状况后端 |
Chrome浏览器 |
Chrome version 4+支持服务器 |
Firefoxwebsocket |
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(); }
参考文献: