Blazor wasm 客户端-服务器通信

Blazor wasm client-server communication

我正在使用 Blazor WebAssembly 开发在线游戏,但我遇到了客户端-服务器通信问题。

我决定使用 SignalR(因为它已在服务器端 Blazor 上使用)但我遇到了一些问题。

我有相当复杂的对象架构 - 继承、嵌套对象、字典、二维数组等。我遵循了这个 tutorial 并且按预期发送了像字符串这样的简单消息,但是当我尝试发送我的带有所有字典和东西的复杂对象,它不再起作用了。我发现,它使用 JSON 格式发送消息(我说的对吗?),它根本不支持嵌套对象、二维数组等(而且我不会解析所有对象变成字符串或其他东西......)。然而,在服务器端 blazor 上,即使使用复杂的数据结构,通信也能完美运行,因为它使用了 websockets(再次强调,这是正确的吗?)。 有没有办法在 Blazor WebAssembly 中使用这种服务器端 blazor 通信? 或者您有什么建议作为客户端-服务器通信的最佳解决方案? (快速通信、嵌套对象支持、字典支持等...) 我读过 json、messagepacks、websockets。 非常感谢任何帮助 ;)

服务器集线器上的代码:

public async Task OnLogin(string gameId)
{
    //gvars contains all information about game - list of players, items etc.
Gvars gvars = GetGameInfo();
Player player = CreateNewPlayer();
    await Clients.All.SendAsync("ReceiveIdAndGameInfo", gvars, player.Id); 
}

客户端代码:

public async Task Start()
{
    hubConnection = new HubConnectionBuilder()
        .WithUrl(NavigationManager.ToAbsoluteUri("/myhub"))
        .Build();

    hubConnection.On<Gvars, int>("ReceiveIdAndGameInfo", (gv, id) =>
    {
        ReceiveNewId(gv, id);
    });

    await hubConnection.StartAsync();
    await hubConnection.SendAsync("OnLogin");
}

private void ReceiveNewId(Gvars gvars, int id)
{
    this.id = id;
    this.gvars = gvars;
    StateHasChanged();
}

将 SIgnalR 用于 Web 程序集应用程序,让我觉得有点倒退。 SignalR 是一个 javascript 库,应用程序必须通过 JSinterop 写入数据。

这正是服务器端 blazor 应用程序所需要的,但对于 Web 程序集,编写 C# class 并使用 HttpClient class 或 ClientWebSocket [=14= 会更容易]],它会做同样的事情,但在网络程序集内。