ASP.NET SignalR 是 ASP.NET 生態系中實現伺服器向用戶端即時推送的核心類庫,支援 WebSocket、Server-Sent Events、Long Polling 等多種傳輸機制,自動協商最佳連線方式。
SignalR 採用遠端代理模式,類似 WCF/Remoting,提供兩種主要程式設計介面:
| 介面 | 特性 | 適用場景 |
|---|---|---|
| PersistentConnection | 低層級、長輪詢基礎、自訂協定 | 特殊傳輸需求、二進制資料流 |
| Hubs (高層 API) | 強型別、自動 JSON 序列化、RPC 風格、客戶端/伺服器雙向呼叫 | 即時聊天、通知、儀表板、協同編輯 |
Hubs 工作流程:
Hub,包含公共方法。Clients.All/Clients.Caller/Clients.Group 呼叫用戶端 JavaScript 函數。
# Package Manager Console
Install-Package Microsoft.AspNet.SignalR

using Microsoft.AspNet.SignalR;
public class ChatHub : Hub {
public void Send(string name, string message) {
// 廣播給所有連線用戶端
Clients.All.addMessage(name, message);
}
public void JoinGroup(string groupName) {
Groups.Add(Context.ConnectionId, groupName);
}
}
// OWIN Startup (推薦)
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(MyApp.Startup))]
namespace MyApp {
public class Startup {
public void Configuration(IAppBuilder app) {
app.MapSignalR(); // 預設路由 /signalr
}
}
}
@{
ViewBag.Title = "SignalR Chat";
}
<script src="~/Scripts/jquery-3.6.0.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.4.1.min.js"></script>
<script src="~/signalr/hubs"></script> @* 動態生成的 Proxy *@
<div>
<input type="text" id="name" placeholder="姓名" />
<input type="text" id="message" placeholder="訊息" />
<button id="send">發送</button>
</div>
<ul id="messages"></ul>
<script>
$(function () {
var chat = $.connection.chatHub; // 小駝峰命名
chat.client.addMessage = function (name, message) {
$('#messages').append('<li><strong>' + name + '</strong>: ' + message + '</li>');
};
$.connection.hub.start().done(function () {
$('#send').click(function () {
chat.server.send($('#name').val(), $('#message').val());
$('#message').val('').focus();
});
});
});
</script>
Redis、SQL Server、Azure SignalR Service 做訊息後端,支援多伺服器叢集。[Authorize] 屬性保護 Hub 方法,Context.User 取得當前使用者。Groups.Add/Remove 實現聊天室、頻道訂閱。OnConnected/OnDisconnected/OnReconnected 處理上下線邏輯。IPerformanceCounter、自訂計數器監控連線數、訊息吞吐量。Microsoft.AspNetCore.SignalRapp.MapHub<ChatHub>("/chatHub")@microsoft/signalr (npm),TypeScript 優先、無 jQuery 相依。SignalR 以 Hubs 高層 API、自動傳輸協商、JSON 雙向 RPC 大幅簡化即時通訊開發。配合 OWIN/ASP.NET Core 中介軟體管線、Redis/Azure 後端擴展,可構建支援百萬級並發連線的即時應用系統。