asp.net - 如何使用 SignalR 安排任务
问题描述
我正在使用最新版本的 ASP.NET Core 来使用 SignalR 开发游戏。我只想安排一件事……比赛开始后的比赛结束信号。
首先我尝试了 Coravel,但我不知道如何动态安排任务。然后我尝试了Hangfire。首先它失败了,因为它正在创建一个新的集线器,然后我尝试将集线器传递给我的任务并得到各种序列化错误。Chroniton 似乎太老了,无法依赖生产。
那么我如何从一个将在该集线器上运行的集线器内安排一个任务呢?我无法想象这是一个不常见的场景。
添加了展示问题的代码:
public async Task MatchStartRequest()
{
var GroupName = PlayersAndGroups[Context.ConnectionId];
await Clients.Group(GroupName).SendAsync("StartGame");
GroupsAndRooms[GroupName].GameStarted = true;
BackgroundJob.Schedule(() => EndGame(GroupName), System.TimeSpan.FromMinutes(1));
}
public async Task EndGame(string GroupName)
{
await Clients.Group(GroupName).SendAsync("EndGame");
PlayersAndGroups.Remove(Context.ConnectionId);
GroupsAndRooms[GroupName].ConnectionIdsAndPlayers.Remove(Context.ConnectionId);
if (GroupsAndRooms[GroupName].ConnectionIdsAndPlayers.Count == 0)
{
GroupsAndRooms.Remove(GroupName);
}
await Groups.RemoveFromGroupAsync(Context.ConnectionId, GroupName);
}
如果我在 EndGame 的第一行(await SendAsync 函数)设置断点,我可以看到服务器正在尝试将消息发送到空集线器,这当然不起作用。如果我编辑 EndGame 方法以将 Hub 以及 GroupName 传递给它,服务器会给我一堆序列化错误。是否有我可以传递的集线器 ID 以从服务器到达该集线器?
解决方案
推荐阅读
- java - mongo java驱动比shell慢(15倍)
- spring - 在 websphere 8.5.5 中部署时 Spring Web 服务中的链接错误
- python - ImportError:无法从“werkzeug”导入名称“url_encode”
- macos - MacOS shm - 无法在 shm 中获得真实的数据大小
- node.js - Sequelize Migrations:未添加任何关联
- javascript - localStorage 中的返回值作为 js 中的 Int?
- vb.net - 为什么访问密钥 E&xit 在我的 VB 程序中不起作用
- python - Django 教程常量 404 错误 urlpattern 识别
- reactjs - WSL 2 无法连接到 MongoDB
- swift - Placeholder not showing after textfield is cleared SwiftUI