我正在使用 Blazor WASM 开发简单的在线游戏。最近我发现 Blazor 客户端是单线程的,这对于我的大多数算法来说都是灾难性的。我想实现比权威服务器更好的架构,并能够在客户端运行代码(用于滞后补偿等......)。各框架在线交流的思路如下:
因此,在客户端,基本上有三个线程 - 第一个用于在按下按键时向服务器发送操作,第二个用于从服务器接收消息,第三个用于执行游戏代码。正如你所看到的,一个线程对我来说是不够的:D
附加信息 - 在线通信是通过 SignalR 实现的。
我知道 .net 8 中可以实现多线程(但遗憾的是我等不及了)。我尝试过预发布,但没有运行。
非常感谢任何帮助或提示;)
提供代码以便更好地理解。
//Executed 60 per second
private async Task Frame()
{
//serialization of actions
json = JsonConvert.SerializeObject(myActions);
Task.Run(() => hubConnection.SendAsync("ExecuteList", json, id)); //still
the same thread
myActions.Clear();
ToolsGame.ProceedFrame(gvars, now);
StateHasChanged();
}
Run Code Online (Sandbox Code Playgroud)
SignalR 监听来自服务器的消息:
hubConnection.On<string>("ExecuteList", (actionMethodNamesJson) =>
{
ExecuteList(actionMethodNamesJson); //deserialize actions from all clients
StateHasChanged();
});
Run Code Online (Sandbox Code Playgroud)