SignalR 服务器与应用程序消息推送
时间: 2024-04-30 21:23:42 浏览: 15
SignalR 是一个 Microsoft 开发的开源实时网络库,它可以让开发者轻松地实现服务器与应用程序之间的实时通信。其中,服务器可以向客户端推送消息,客户端也可以向服务器发送消息。
对于服务器向客户端推送消息,SignalR 提供了以下常用的方法:
- `Clients.All.SendAsync()`:向所有连接的客户端发送消息。
- `Clients.User(userId).SendAsync()`:向指定用户发送消息。
- `Clients.Group(groupId).SendAsync()`:向指定组中的所有客户端发送消息。
- `Clients.Caller.SendAsync()`:向当前连接的客户端发送消息。
对于客户端向服务器发送消息,SignalR 提供了以下方法:
- `connection.invoke()`:调用服务器上的方法。
- `connection.send()`:向服务器发送消息。
在使用 SignalR 时,需要在服务器端创建一个 Hub 类,该类继承自 `Microsoft.AspNetCore.SignalR.Hub` 类,并定义需要向客户端推送的方法。在客户端,需要使用 SignalR 客户端库连接到服务器,并订阅服务器推送的消息。
示例代码如下:
服务器端:
```csharp
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
```
客户端:
```javascript
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
connection.on("ReceiveMessage", (user, message) => {
console.log(user + " says: " + message);
});
connection.start().then(() => {
console.log("Connected");
connection.invoke("SendMessage", "User1", "Hello");
}).catch((err) => console.error(err.toString()));
```