【发布时间】:2021-11-10 11:47:38
【问题描述】:
我正在使用 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();
}
【问题讨论】:
-
JSON 支持对象和数组。请显示您的代码和示例数据,并具体说明正在发生的错误/问题。我们无法修复代码描述。请提供问题的minimal reproducible example。另见How to Ask。谢谢。
-
感谢您的代码,但也请按要求对您的具体问题提供清晰的解释。
标签: c# blazor webassembly