标签:
什么是 SignalR?ASP.NET Core SignalR 是一个开源库,它简化了向应用措施添加实时 web 成果的成果。 实时 Web 成果使处事器端代码能够即时将内容推送到客户端。
官方列举的SignalR适用场景:
需要从处事器进行高频率更新的应用。 示例包孕游戏、社交网络、投票、拍卖、舆图和 GPS 应用。
仪表板和监视应用。 示例包孕公司仪表板、即时发卖更新或旅行警报。
协作应用。 协作应用的示例包孕白板应用和团队会议软件。
需要通知的应用。 社交网络、电子邮件、聊天、游戏、旅行警报和很多其他应用都需使用通知。
创建SignalR处事端Asp.Net Core API 这参考了Blog系统的写法
引用SignalR序列化的包
Install-Package Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson -Version 3.1.3
Startup类ConfigureServices要领里注册SignalR处事
services.AddSignalR().AddNewtonsoftJsonProtocol();
创建SignalR的Hub界说动静,分袂是IChatClient和ChatHub
IChatClient
ChatHub
public class ChatHub : Hub<IChatClient> { /// <summary> /// 向指定群组发送信息 /// </summary> /// <param name="groupName">组名</param> /// <param name="message">信息内容</param> /// <returns></returns> public async Task SendMessageToGroupAsync(string groupName, string message) { await Clients.Group(groupName).ReceiveMessage(message); } /// <summary> /// 插手指定组 /// </summary> /// <param name="groupName">组名</param> /// <returns></returns> public async Task AddToGroup(string groupName) { await Groups.AddToGroupAsync(Context.ConnectionId, groupName); } /// <summary> /// 退出指定组 /// </summary> /// <param name="groupName">组名</param> /// <returns></returns> public async Task RemoveFromGroup(string groupName) { await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName); } /// <summary> /// 向指定成员发送信息 /// </summary> /// <param name="user">成员名</param> /// <param name="message">信息内容</param> /// <returns></returns> public async Task SendPrivateMessage(string user, string message) { await Clients.User(user).ReceiveMessage(message); } /// <summary> /// 当连接成立时运行 /// </summary> /// <returns></returns> public override Task OnConnectedAsync() { //TODO.. return base.OnConnectedAsync(); } /// <summary> /// 当链接断开时运行 /// </summary> /// <param name="ex"></param> /// <returns></returns> public override Task OnDisconnectedAsync(System.Exception ex) { //TODO.. return base.OnDisconnectedAsync(ex); } public async Task SendMessage(string user, string message) { await Clients.All.ReceiveMessage(user, message); } //定于一个通讯管道,用来打点我们和客户真个连接 //1、客户端挪用 WinFormsApp,就像订阅 //2、处事端主动向客户端发送数据,,名字千万不能错 //3、客户端再通过 ReceiveUpdate ,来接收 public async Task WinFormsApp(string name, string msg) { await Clients.All.ReceiveUpdate($"接收到{name}的动静,动静内容:{msg}"); } }创建中间件SignalRSendMildd和MiddlewareHelpers
SignalRSendMildd
MiddlewareHelpers
public static class MiddlewareHelpers { /// <summary> /// SignalR中间件 /// </summary> /// <param name="app"></param> /// <returns></returns> public static IApplicationBuilder UseSignalRSendMildd(this IApplicationBuilder app) { return app.UseMiddleware<SignalRSendMildd>(); } }