当前位置: 首页 > news >正文

新乡市网站建设_网站建设公司_网站备案_seo优化

技术网站模版,商城网站设计需要哪些技术,衡水做企业网站,门户网站开发要多久前言Asp.Net SignalR已经出来很久了#xff0c;但是一直没有静下心来好好看看。昨天花了几个小时的时间看了下。首先借鉴了官方文档#xff0c;如何搭建一个SignalR的Demo。参考文章#xff1a;https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?viewaspnet… 前言  Asp.Net SignalR已经出来很久了但是一直没有静下心来好好看看。昨天花了几个小时的时间看了下。首先借鉴了官方文档如何搭建一个SignalR的Demo。  参考文章https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?viewaspnetcore-2.1tabsvisual-studio   SignalR地址https://github.com/aspnet/SignalR  所以为了快速搭建和体验.Net Core版本的SignalR我选择了下载官方的Demo和参考官方给的教程。所以具体的搭建过程我就不再本文中写了。体验效果  官网给出的DEMO运行如下图     点击connect查看一下network。可以发现它在当前浏览器支持三种方式。    而且和.NET Framework版本不同的是新版SignalR中的Hub类型也是蛮丰富的。Demo中给出了 普通HubDynamicHubHubT 三种类型。我们去看看其中的区别吧。  普通Hub  查看定义可以看到普通Hub中的Clients类型是 IHubCallerClients namespace Microsoft.AspNetCore.SignalR{    //    // 摘要:    //     A base class for a SignalR hub.    public abstract class Hub : IDisposable    {        protected Hub();        //        // 摘要:        //     Gets or sets an object that can be used to invoke methods on the clients connected        //     to this hub.        public IHubCallerClients Clients { get; set; }        //        // 摘要:        //     Gets or sets the hub caller context.        public HubCallerContext Context { get; set; }        //        // 摘要:        //     Gets or sets the group manager.        public IGroupManager Groups { get; set; }        //        public void Dispose();        //        // 摘要:        //     Called when a new connection is established with the hub.        //        // 返回结果:        //     A System.Threading.Tasks.Task that represents the asynchronous connect.        public virtual Task OnConnectedAsync();        //        // 摘要:        //     Called when a connection with the hub is terminated.        //        // 返回结果:        //     A System.Threading.Tasks.Task that represents the asynchronous disconnect.        public virtual Task OnDisconnectedAsync(Exception exception);        //        // 摘要:        //     Releases all resources currently used by this Microsoft.AspNetCore.SignalR.Hub        //     instance.        //        // 参数:        //   disposing:        //     true if this method is being invoked by the Microsoft.AspNetCore.SignalR.Hub.Dispose        //     method, otherwise false.        protected virtual void Dispose(bool disposing);    }}  IHubCallerClients 定义如下public interface IHubCallerClients : IHubCallerClientsIClientProxy, IHubClientsIClientProxy  {  }  而框架又给IClientProxy增加了扩展方法SendAsync  所以在普通Hub中定义客户端方法的时候需要把方法名当作参数传入SendAsync方法中。例如如下代码public Task Send(string message)       {           return Clients.All.SendAsync(Receive, ${Context.ConnectionId}: {message});       }  DynamicHub  DynamicHub我是比较喜欢的因为他和 Framework版的是一样或者说看起来是一样的的。动态Hub我们就可以不必拘泥于只能调用SendAsync方法了。例如public Task SendToOthers(string message)      {          return Clients.Others.ThisIsMyReceiveMethod(${Context.ConnectionId}: {message});      }  DynamicHub的Clients类型为DynamicHubClients 它的内部变量全都是dynamic类型的。    HubT  泛型Hub就把规约交给开发者制定。在Demo中 HubIChatClient 中的IChatClient接口定义了Receive方法因此Clients中的对象可以调用Receive方法。同理我们可以根据业务需要定义自己的方法。至少从代码上看会显得更加通俗易懂一些。比如public interface IChatClient   {       Task Receive(string message);       Task LoginSuccess(long userId);   }public Task Login(long userId)   {       return Clients.Caller.LoginSuccess(userId);   }  其实从代码上来看的话他们都是Hub只不过是不同的扩展实现而已。而泛型Hub不过是用户自定义泛型接口而默认Hub中的默认泛型接口为IClientProxy.所以看到这里如果我就想使用原生的Hub而又想自定义方法怎么办呢很简单加扩展就可以了。  为什么自己加就可以呢其实 SendAsync 就是扩展方法它内部也是调用了SendCoreAsync方法。于是乎写下自己的扩展方法那这样子就很灵活了。我们把method参数去掉直接写死试试public static Task LoginAsync(this IClientProxy clientProxy, string message, CancellationToken cancellationToken  default(CancellationToken))      {          return clientProxy.SendCoreAsync(LoginSuccess, new object[] { message}, cancellationToken);      }  其实说白了这个扩展方法还是需要传入method参数的只不过封装了一层似乎感觉这么做有意义吗哈哈还是老老实实用泛型吧那么我们在去看Hub中的方法修改Send方法如下public Task Send(string message)      {          return Clients.All.LoginAsync(${Context.ConnectionId}: {message});      }  是不是这样子就实现了自己自定义方法了呢个人觉得这么写还绕了一圈不如用泛型或者Dynamic了。  运行一下看看效果    其实我也是抱着试试的态度没想到还真是这样和新方法就是SendCoreAsync而其他方法只不过是上层封装使得代码更加通俗易懂。使用Redis  Demo中的其他例子就不再演示了。广播一对一一对多加入组退出组等基本和之前一样。这里在演示一下使用Redis做不同实例之间的通信效果。  首先程序集是不能少的Microsoft.AspNetCore.SignalR.Redis然后在Startup中补充代码    打开Redis客户端使用MONITOR命令监听一下从程序启动到连接在发送一条广播消息hello redis。  redis 监听结果如下    所以PUB/SUB还是立了大功呢。  这里用CMD运行了两个实例端口分别为 88818882来模拟两个站点。    演示效果如下    没问题的哦其实仔细想想虽然运行了两个网站实例但是连接信息都保存在同一个Redis上那肯定通信是木的问题的啦。总结  只是简单的运行了一下DEMO大致了解了一下 .Net Core SignalR的表层至少跑Demo是跑起来了并且使用Redis也是没有问题的。不过好像会出现运行一旦时间程序自动停掉的问题不知道是不是我电脑的问题。。今天就到这里吧希望大家能有所收获。 本文代码地址https://github.com/fanpan26/LayIM.AspNetCore/tree/master/src/LayIM.AspNetCore.Demo/SignalRSamples相关文章基于.NET SingalR,LayIM2.0实现的web聊天室ASP.NET 2.2 Preview 1首次支持Java SignalR客户端Asp.Net Core SignalR 用泛型Hub优雅的调用前端方法及传参ASP.NET Core的实时库: SignalR简介ASP.NET Core的实时库: SignalR -- 预备知识横向扩展你的ASP.NET Core SignalR 应用微信小程序与AspNetCore SignalR聊天实例Asp.Net Core SignalR 与微信小程序交互笔记ASP.NET Core 2.1带来SignalR、Razor类库发现 ASP.NET Core SignalRSignalR Core尝鲜原文地址: https://www.cnblogs.com/panzi/p/9649315.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.ihoyoo.com/news/124700.html

相关文章:

  • 淮安营销型网站建设wordpress 后台页面不正常
  • 把开发的网站让外网能访问要怎么做网页设计代码网站
  • 石家庄网站排名ui设计简介
  • 建设学院2级网站的作用汽车案例网站
  • 怎样做网站呢网页设计代码如何写实训报告过程
  • 北京市建设工程造价管理处 网站音乐盒网站源码
  • 自己在家做网站双城网站建设公司
  • 网站制作软件手机单页网站在线制作
  • 建网站要多少钱一台网站源码下载了属于侵权吗
  • 做图片推广的网站有哪些wordpress 搜索乱码
  • 安徽省住房城乡建设厅网站官网昆山网站建设昆山
  • 网站开发 需要用到什么软件有哪些wordpress织梦哪个好
  • 竹子建站公司安装失败未能找到wordpress目录
  • 莆田哪里有网站开发建立网站导航栏的方法
  • 做直播教程的网站有哪些网站建设方投资成本
  • 狮山建网站管理人员培训课程
  • 江西 网站 建设 开发品牌建设的概念
  • 做加油机公司网站东台专业做网站
  • 建设网站需要具备什么条件网站群建设优点
  • 网站开发实验室陕西网站开发企业
  • 网站栏目设计内容制学网网站
  • 网站开发图片素材如何做网站推广方案
  • 南京手机网站设计专业东莞网站排名优化费用
  • 做产品网站设计应该注意什么竹子建站邀请码
  • h5响应式网站建设方案贵安建设集团网站
  • 网站注册协议网站百度收录批量查询
  • 网站开发的开题报告引言wordpress清除插件
  • 正规网站建设网站制作免费网络连接
  • 口子网站怎么做wordpress多菜单
  • 西安网站建设itcandy潍坊网站建设公司哪家好