SignalR是Microsoft用于开发实时应用程序的流行服务之一,它基于以下原理:客户端通过向Web应用程序发送异步(异步)通知进行通信。
.Net客户端在ASP.NET Core和AndroidOS(客户端)上的javaScript支持的平台上运行。
iOS和c ++有非官方的增强功能。希望在SignalR文档中提供官方支持。
目的
让我们使用.NET CORE和SignalR实现一个实时聊天应用程序。
服务器端让我们从在.NET端安装带有ASP.NET Core的SignalR服务开始。正式文件中对以下之前的SignalR hub进行了说明。
SignalR集线器API允许您从服务器的已连接客户端调用方法。在服务器代码中,定义客户端调用的方法。在客户端代码中,您定义从服务器调用的方法。SignalR在后台处理所有事务,从而实现了客户端与服务器之间的实时通信以及服务器与客户端之间的实时通信。
SignalR集线器是我们确定客户端将传输的数据结构和规则的结构。
在此应用程序中,我们将实现数据,然后客户端和服务器将从服务器转到所有客户端。
设置在服务器端,在.NET Core for NuGet上安装SignalR库。
Microsoft.AspNetCore.SignalR.Core
创建集线器结构。
让我们继承SignalR库提供的Hub抽象类。
namespace Server.Hubs
{
public class ChatHub : Hub
{
[HubMethodName("sendMessage")]
public void SendMessage(MessageDto messageDto)
{
messageDto.ConnectionId = Context.ConnectionId;
Clients.All.SendAsync("messages", messageDto);
}
public override async Task OnConnectedAsync()
{
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception exception)
{
await base.OnDisconnectedAsync(exception);
}
}
}
在这里,
- SendMessage方法将所有要接收的消息对象的客户端发送给客户端,并建立所有连接。全部将使用.SendAsync发送,其中“ 全部”方法将覆盖连接到集线器的所有客户端。该消息将发送给所有客户端,包括有效地发送定义为All的消息,并且我们将使用“ messages”标签侦听客户端上所有已发送的消息。
您还可以使用 AllExcept,客户端,客户端,组,GroupExcept,组,用户,用户类型。这些类型包括对要传输的客户端的过滤。
例如,您将仅与特定的connectId通信。因此,您可以像使用Client(connectionId)与一个人进行通信。
或者,您可以使用客户端(connectionIds)打开一个会议室,只有连接到该会议室的客户端才能进行通信。使用Group(groupName),可以进行配置,例如与组中的客户端通信。
配置让我们对启动文件进行signalR定义。在这里,我们定义了名为“ chatHub ”的中心类。
链接: http:// localhost / chatHub
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
...
}
public void Configure(IApplicationBuilder app, IHostEnvironment env)
{
...
app.UseSignalR(routes =>
{
routes.MapHub("/chatHub");
});
}
}
用户认证
让我们谈谈在用户验证过程中可能有用的一些要点。
在服务器端,用户定义的JWT可以通过使用Claims定义给用户分配令牌,从而为服务器端验证分配权限。
执行此操作后。通过将[Authorize]符号添加到集线器类,您可以通过指定必须对服务访问已验证的请求以及通过使用Claims接收userID信息来执行特定于用户的操作。
您可以通过将客户端上身份验证所需的令牌信息添加到标头来发出连接请求。
_hubConnection = new HubConnectionBuilder()
.WithUrl("https://localhost/connectionHub", options =>
{
options.Headers["Authorization"] = "Bearer " + token;
})
.Build();
应用
您可以在简单的级别上检查以下使用.NET CORE API(服务器)和WPF(客户端)开发的项目。