SignalR 通过 Hub 建立服务端与客户端的双向长连接实现实时通信,支持自动降级传输方式。Hub 管理连接、分组与消息推送,客户端需调用 start() 并监听指定函数名接收消息。

SignalR 实现实时通信,核心就是靠 Hub(集线器) 建立服务端与客户端的双向长连接,并通过它来主动推送消息。它不是轮询,也不需要客户端反复请求——服务器有新数据时,直接“喊一声”,所有在线客户端立刻收到。
Hub 是怎么工作的
Hub 是 SignalR 的通信中枢。你写一个继承 Hub 的类(比如 ChatHub),它就自动具备了管理连接、分组、广播和定向通信的能力。客户端连上来后,会获得一个唯一的 ConnectionId,服务端随时能用它发消息。
- 每个客户端连接都会触发
OnConnectedAsync(),断开则触发OnDisconnectedAsync() - Hub 类里的
public async Task方法,可被客户端调用(如发送聊天内容) - Hub 类里调用
Clients.XXX.SendAsync(),就能把消息推给指定目标
常用的推送消息方法
消息不是“发给页面”,而是“发给客户端上某个已定义的 JavaScript 函数”。所以服务端推送时,要指定函数名(如 "ReceiveMessage"),客户端提前用 connection.on("ReceiveMessage", ...) 监听好。
-
Clients.All.SendAsync("ReceiveMessage", user, msg)—— 推送给所有已连接客户端 -
Clients.Client(connectionId).SendAsync(...)—— 只推给某一个特定连接(适合私聊或状态同步) -
Clients.User(userId).SendAsync(...)—— 推给某个用户的所有设备(需配合身份认证) -
Clients.Group("room1").SendAsync(...)—— 推给加入某组的客户端(如聊天室、协作白板)
前后端怎么配起来
服务端配置好 Hub 类和路由,前端才能连上。关键三步不能漏:
标签: javascript java js 前端 浏览器 app websocket 后端 ai 路由
还木有评论哦,快来抢沙发吧~