asp.net core 2.0 webapi集成信号员(实例讲解)
在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的;
这两天想着不能这么无私,最近。净核心貌似挺流行的,闲来无事也自己搞了个ASP。网核心信号员
博客园里面也有人在。核心网2.0下面集成了信号员,但是是集成在同一个项目里面的,但是大家都知道我们很多的项目都是分离的;
而且信号员涉及到连接数和内存资源的占用问题,如果都集成在一个项目里面当访问量多大的时候容易造成网站访问缓慢,具体原因就不多说了
所以我这里做了一个在net core webapi里面集成信号员,我们就可以通过调用webapi来实现服务器向客户端推送消息
第一步引用努get:Mrcrosoft .信号
第二步添加配置代码:
首先配置服务里面添加如下代码:
public void ConfigureServices(IServiceCollection services){ services .addsignar();服务AddCors(options={ options .添加策略('信号核心',policy=policy .AllowAnyOrigin().AllowAnyHeader().allowy method());});服务AddSingletonIServiceProvider,service provider();}然后安装使成形里面添加
公共空配置(IApplicationBuilder应用程序,ihostingenvirmentenv){ if(env .IsDevelopment()) { app .usedeveloper异常页();} //跨域支持应用程序.UseCors('信号核心');应用程序.usesignor(routes={ routes .maphub signal rubs(' signal rubs ');});应用程序.UseWebSockets();应用程序.UseMvc();}然后我们添加一个中心
公共类信号ubs:Hub { ///summary ///创建信号员链接////summary////param name=' parent id ' PID(作为用户组)/param///param name=' shopId ' sid/param公共任务组用户(字符串父标识,字符串商店标识){组.添加异步(上下文. ConnectionId,ParentID);信号组。用户组。添加(新的信号组(){连接标识=上下文ConnectionId,GroupName=parentId,ShopId=ShopId });返回客户所有人。调用异步(' noticionline ','用户组数据更新完成,新增编号为:' '上下文ConnectionId ' PID : ' parentId ' sid : ' shopId ' ');}公共覆盖任务OnDisconnectedAsync(异常异常){ //掉线移除用户var用户=信号组.用户组。first ordefault(c=c . ConnectionId==Context .ConnectionId);如果(用户!=null){ signal GrouPs .用户组。删除(用户);团体。移除异步(上下文连接标识,用户.组名);}返回基地OnDisconnectedAsync(异常);} }PS:我这里是根据本人业务需要来做的,大家可以修改成其他的(用户量大的时候内存占用肯定高,这里只做一个简单的例子)
以上基本的环境搭建就已经完成了
接下来控制器里面的代码
[产品('应用程序/JSON ')][路线(' API/MRSoftPush ')]公共类MRSoftPushController : Controller { private ihubcontextsignalhubs hubContext;公共MRSoftPushController(iServiceProvider服务){ hubContext=service .getserviceihubcontextsignalmers();} [HttpGet]公共字符串get(){ 0返回日期时间.现在。ToString(' yyyy-MM-DD hh :MM 3360s 3360 ffff ');} ///摘要///单个connectionid推送////summary////param name=' groups '/param///returns/returns[httpset,Route(' ANy ')]public IActionResult ANy([from body]ienumerablesignal group){ if(group!=空组any()){ var id=group .选择(c=c . ShopId);变量列表=信号组.用户组。其中(c=身份证.包含(c . ShopId));foreach(列表中的定义变量项目)hubContext .客户。客户(项目连接标识).调用async(' ANy ',$'{item .ConnectionId } : {项目.content } ');}返回ok();} ///摘要///全部推送////summary////param name=' message '/param///returns/returns[HttpGet,Route(' ElEMENT ')]public IActionResult ElEMENT(字符串消息){ hubContext .客户。全部。调用async(' everybody ',$ ' { message } ');返回ok();} ///摘要///组推送////summary////param name=' group '/param////returns/returns[httpset,Route(' any group ')]public IActionResult any group([from body]信号组组){ if(group!=null) { hubContext .客户端。组(组GroupName).InvokeAsync('AnyGroups ',$'{group .content } ');}返回ok();} ///摘要///多参数接收方式////summary////param name=' message '/param///returns/returns[HttpGet,Route(' MoreparamsRequest ')]public IActionResult MoreparamsRequest(字符串消息){ hubContext .客户端所有人。调用异步(' morepramresrequest ',消息,日期时间现在。ToString(' yyyy-MM-DD hh :MM 3360s 3360 ffff ');返回ok();} }服务器端的代码到这里全部完成,接下来咱们看客户端的代码
我的客户端代码是在另外一个项目里面,和服务器端是分离的
输入类型='text' id='ParentId '占位符=' ParentId '/br/输入类型='text' id='ShopId '占位符=' ShopId '/br/按钮id='乱搞你'用户上线/button br/br/br/ul id=' message '/ul @ section scripts { script $(function(){ let HubURl=' http://192。168 .0 .' 149:8009/signal HuBs ';让httpConnection=新信号.HttpConnection(HubURl);让hubConnection=新信号集线器连接(HttpConnection);$(' #操你妈')。单击(function(){ HubConnection。调用(' IntUser ',$('#ParentId ').val(),$('#ShopId ').val());});集线器连接。on(' noticionline ',数据={ $('#message ').追加(‘李’数据/Li’);});hub CONNECTION。on(' ElEMENT ',data={ $('#message ')).追加(' li style=\ ' color:red\ '全部推送:“数据”/李);});hub connection . on(' any group ',数据={ $('#message ').追加(' li style=\ ' color:black\ '单个用户组推送:“数据”/李);});集线器连接。on(' ANYWHERE ',数据={ $('#message ').追加(' li style=\ ' color:blue\ '单个身份推送:“数据”/李);});集线器连接。on(' morepramsrequest ',(消息,日期)={ $('#message ').追加(' li style=\ ' color:green\ '多参数接收:“消息”:“数据”/Li’);});集线器连接。start();});/script}页面上引用连个射流研究…
脚本src=' http :/js/signor-client。量滴js /脚本脚本src=' http :/js/jquery。量滴js /脚本
到这里基本就已经完成了,下面看一下运行效果
第一次写博客,有点紧张,代码写得比较仓促,很多细节都没有优化,有很多不足之处,望各位多多指正
以上这篇ASP。网核心2.0 webapi集成信号员(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
版权声明:asp.net core 2.0 webapi集成信号员(实例讲解)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。