文章目录
1、什么是 SignalR?
ASP.NET Core SignalR 是一个开源库,它简化了向应用程序添加实时 web 功能的功能。 实时 Web 功能使服务器端代码能够即时将内容推送到客户端。
适用场景:
- 需要从服务器进行高频率更新的应用。 示例包括游戏、社交网络、投票、拍卖、地图和 GPS 应用。
- 仪表板和监视应用。 示例包括公司仪表板、即时销售更新或旅行警报。
- 协作应用。 协作应用的示例包括白板应用和团队会议软件。
- 需要通知的应用。 社交网络、电子邮件、聊天、游戏、旅行警报和很多其他应用都需使用通知。
详情介绍详见官网:https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-3.1
2、创建Hub中心
2.1 Hub集线器介绍
Hub集线器的结构如图所示:

- OnConnectedAsync方法:客户端连接的时候事件方法
- OnDisconnectedAsync方法:客户端断开连接的时候事件方法
- Clients对象:服务器和客户端之间的通信对象
- Context对象:该对象是当前请求的上下文对象,例如包含连接Id、用户身份信息等等
2.2 创建自定义集线器
internal class MyCore31Hub : Hub
{
static IDictionary<string, ClientInfo> _clients;
static MyCore31Hub()
{
_clients = new Dictionary<string, ClientInfo>();
}
public async override Task OnConnectedAsync()
{
var connid = Context.ConnectionId;
var httpContext = Context.GetHttpContext();
httpContext.Request.Query.TryGetValue("groupId", out StringValues groupid);
httpContext.Request.Query.TryGetValue("userId", out StringValues userId);
httpContext.Request.Query.TryGetValue("ip", out StringValues ip);
if (!userId.Equals(StringValues.Empty))
{
if (_clients.ContainsKey(userId))
{
_clients.Remove(userId);
}
_clients.Add(userId, new ClientInfo()
{
ConnectionId = connid,
GroupId = groupid,
UserId = userId,
Ip = ip
});
await Groups.AddToGroupAsync(connid, groupid);
await SendConnection(groupid, new

本文详细介绍了ASP.NET Core SignalR的使用方法,包括创建Hub中心、配置SignalR服务、实现客户端连接及交互。SignalR是一个强大的库,允许服务器即时推送内容到客户端,适用于游戏、社交网络、地图应用等高频率更新场景。
最低0.47元/天 解锁文章
824

被折叠的 条评论
为什么被折叠?



