一、前言
上次我们谈到了如何在ASP.NET芯使用网络套接字。这次的主角是SignalR,它为我们提供了一个简化WebSocket操作的框架。
ASP。NET SignalR是ASP.NET旗下的一个类库,可以在ASP.NET的Web项目中实现实时通信。什么是实时通信的网络?也就是说,客户端(网页)和服务器可以相互通知消息并调用方法,这当然是实时操作的。WebSockets是HTML5提供的新API,可以在网页和服务器之间建立Socket连接。当WebSockets可用时(即浏览器支持HTML5),Signaler使用WebSockets,当不可用时,Signaler会使用其他技术来保证同样的效果。
当然,Signaler还提供了一个非常简单易用的高级API,使得服务器可以单独或批量调用客户端上的JavaScript函数,使得连接管理变得非常方便,比如客户端与服务器的连接或断开,客户端的分组,客户端的授权,使用Signaler都非常容易实现。
二、信号员的现状
我们知道ASP.NET Core 1.0 . x不包含Signaler,但是Signaler技术计划集成到ASP.NET Core 1.2中,其开发团队会用TypeScript重写其javascript客户端,服务器端会接近ASP.NET Core的开发模式,比如集成到ASP.NET Core依赖注入框架中。
目前SignalR技术无法在1.0中使用,本文实现的Demo都是在1.1下进行的。
第三,集成信号
当然,ASP.NET核心1.2还要发布一段时间。目前,集成Signaler并不是现成的解决方案。我们需要手动整合信号员。
要在ASP.NET内核中使用SignalR,首先应该参考微软的NuGet Package包。服务器和微软。aspnetcore.websockets。
当然也有人说没有ASP.NET核心,没有集成signor,所以在NUGET上找不到signor的包。如果你想添加参考,我们必须在我的获取上寻找它。
1.添加NuGet源
在程序根目录中,创建一个名为NuGet的新文件。配置,如下所示:
?xml版本='0 '编码='utf-8 '?configuration package sources clear/add key=' aspnetcidev ' value=' https://dotnetmygetorg/F/aspnetcore-ci-dev/API/v3/index JSON '/Addkey=' apinungetorg ' value=' https://apinungetorg/v3/index JSON '/package sources/configuration。当然,我们也可以通过在Visual Studio中设置NuGet Packages的源代码来引用这个程序集。
2.添加对project.json的引用
Microsoft aspnetcoresignalrserver ' : ' 0-* ',Microsoft aspnetcorewebsockets ' : ' 0-* '可以注意到signaler的版本是0.2.0的alpha版本,所以后续版本可能会有很大的变化!我听说重写很容易。
值得注意的是,SignalR目前只能在ASP.NET核心1.1及以上版本上使用。在本文中,版本。我用的NET Core SDK是1.0.0-preview2-003131,所以有参考问题的同学可以尝试把CoreApp版本改成1.1,所有的AspNetCore程序集也改成1.1。
3.添加配置代码
我们需要在启动类的ConfigureServices方法中添加以下代码:
public void ConfigureServices(IServiceCollection services){ servicesaddsignator(options={ options shubsenabledetailderrors=true;});}将以下代码添加到Startup类的Configure方法中:
appUseWebSockets();appusesignor();4.添加一个HUB类
这里我们只实现了一个小Demo,一个简单的聊天室,很多人进入后就可以看到他们发送的信息:
公共类ChatHub : Hub{公共静态列表字符串连接器;public void Send(字符串发件人,字符串消息){ ClientsAllmessageReceived(发件人,消息);} public void Connect(string new user){ if(ConnectedUsers==null)ConnectedUsers=new Liststring();ConnectedUsersAdd(新用户);client collegetconnectedusers(ConnectedUsers);ClientsOthersnewUserAdded(新用户);}}5.客户支持
在wwwroot目录下创建一个名为chat.html的超文本标记语言静态文件,内容如下:
!DOCTYPE html html head title awesome Chat Application/title meta charset=' utf-8 '/head body style type=' text/CSS ' userListDiv { float : right;} /style ul id='messages'/ul输入类型='text' id='messageBox' /输入类型=' button ' id=' sendMessage '值=“发送消息!”/div class=' UserListDiv ' ul id=' UserList '/ul/div脚本src=' http :http://Ajax aspnetcdncom/Ajax/jQuery/jQuery-min js '/脚本src=' http :http://Ajax aspnetcdncom/Ajax/signor/jquerysnagnor-min js '/脚本脚本src=' http 3360 signor/hub '/脚本src=' http 333同目录下建立一个聊天。射流研究…添加要实现功能的脚本:
var userName=提示符('输入您的姓名: ');var chat=$ connectionchatHubchatclientmessageReceived=function(发起方用户,消息){ $(' # messages ')append(' listrong '发起方用户'/strong : '消息);};chatclientgetConnectedUsers=函数(用户列表){ for(var I=0;我用户列表长度;(一)添加用户(用户列表[I]);};ChatClientNewUserAdded=function(NewUser){ AddUser(NewUser);}$('#messageBox ')焦点();$(“# sendmail”)单击(function(){ chatserversend(userName,$(' # messageBox ')val());$(" # messageBox ")val(" ");$(' #消息框')焦点();});$('#messageBox ')快捷键(函数(事件){ if(事件键码==13)$(' # sendmail ')点击();});函数添加用户(user){ $('#userList ')追加(“李”用户“/李”);} $ connectionhublogging=true $ connectionhubstart()done(function(){ chatserverconnect(userName));});最后我们来运行它吧:
四、最后
附上一个可用的演示:http://霞仔。jb51。net/201702/马援/AspNetCore .SignalRDemo_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。