书店网站建设策划书总结做美剧盗版网站
web/
2025/9/30 20:01:13/
文章来源:
书店网站建设策划书总结,做美剧盗版网站,汉口网站制作公司,上海it培训机构继续学习最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记#xff0c;在使用过程中稍微看了下它的源码,不得不说微软现在真的强大,很多事情都帮你考虑到了,比如使用Redis,使用Redis后,你的websocket就支持横向扩… 继续学习最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记在使用过程中稍微看了下它的源码,不得不说微软现在真的强大,很多事情都帮你考虑到了,比如使用Redis,使用Redis后,你的websocket就支持横向扩展了,使用的方式也特别简单,只需要在services.AddSignalR的后面再加上:.AddRedis(options
{options.Configuration.ConnectTimeout 30;options.Configuration.EndPoints.Add(redis ip);
})SignalR Core利用了Redis的发布订阅功能,就实现了横向扩展,再也不用担心一台ws服务器不够用了.今天要说的并不是SignalR Core的负载均衡方式,而是如何优雅的调用前端方法。大家都知道SignalR Core除了可以建立websocket连接还能双向调用服务器调用客户端方法客户端也能调用服务器的方法。原始调用我们看下如何调用客户端方法public class ChatHub : Hub{ //服务端方法public async Task SendMessage(string user, string message) { //ReceiveMessage 为客户端方法让所有客户端调用这个方法await Clients.All.SendAsync(sayHello, user, message);}
}还是ChatHub~~~~~我们可以看到在这里我们调用了客户端的sayHello,并传递了两个字符串参数user,message,是不是觉得丑陋,说实在的真心看不下去哈。而且不变维护相当于你要把方法名硬编码传递多少个参数也没有个准没有好的文档后期很难维护。好在微软已经为我们考虑到了这个情况我们可以把客户端的方法用接口的方法定义了对没错用接口的方式定义客户端的方法优雅调用使用的方式也超级简单我们先定义一个客户端的接口public interface IMyClient{ Task SayHello(string user, string message);
}然后我们的Hub集成HubT就是你定义的客户端接口这里也就是IMyClient我用上面的ChatHub举例public class SendMessageHub : HubIMyClient
{ public async Task SendMessage(string user, string message){await this.Clients.All.SayHello(user, from server: message); //ReceiveMessage 为客户端方法让所有客户端调用这个方法//await Clients.All.SendAsync(sayHello, user, message);}
}注释掉的是我之前的方式SayHello是客户端的方法会通过websocket传递到前端下图为我用小程序通讯产生的结果是不是SoEasy我觉得还不算完我们参数目前是按照数组的方式传递的如果有限定的参数名就完美了我们改造下IMyClientpublic interface IMyClient{ Task SayHello(HelloMessage message);
} public class HelloMessage{ public string User { get; set; } public string Message { get; set; }
}修改下我们的Hub的SendMessage方法public Task SendMessage(string user, string message)
{ return this.Clients.All.SayHello(new HelloMessage(){User user, Message from server: message});//return this.Clients.All.SendAsync(sayHello, $from server:{message});
}在运行下我们的小程序LooK方法名没有改变但是我们返回的参数成了一个对象如果看过我之前那篇博文的话应该记得在前端的时候我需要做一个映射来调用前端的方法在映射中我参数使用的是数组进行传递的现在不需要去看数组中第几个参数是我需要使用的了你完全可以使用callMethods(methods, args) { console.log(methods, args); let self this; let arg args[0]; switch (methods) { case SayHello:self.sayHello(arg.message); break;}
},这里还有个问题就是接口中的方法名是大写开头的而js的规范呢一般都是小写开头的所以在映射方法的时候需要注意下反正这个大小写问题有点不是很爽参数在传递的时候倒是直接转换成首字母小写我相信SignalR Core是可以实现的只是我不知道而已稍后在研究研究如果可行我会更新此篇博文。如果你要在接口中用小写来定义这个方法也没有问题但我觉得就是不符合规范习惯不允许我如此粗糙哈哈。写在最后至于调用的原理我没有细看正好在看源码的时候看到了Hub很疑惑尝试了下后才发觉SignalR的牛逼后来发现其实在SignalR 2.1中引用了这个概念估计很多人已经在用了但好像提到的人很少包括微软的文档这次也是意外发现赶快记录下来希望对您有用。Asp.Net Core SignalR确实很强大有兴趣的可以去gayhub上去研究下他们的源码。原文地址https://www.cnblogs.com/inday/p/signalR-core-grace-call-client-methods.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84630.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!