我正在使用Blazor WebAssembly开发一款在线游戏,但我面临着客户端-服务器通信的问题。
我决定使用SignalR(因为它已经在服务器端Blazor上使用了(,但我遇到了一些问题。
我有相当复杂的对象体系结构-继承、嵌套对象、字典、2D数组等。我遵循了本教程,像字符串这样的简单消息会按预期发送,但当我尝试用所有字典和其他东西发送我的复杂对象时,它就不再起作用了。我发现,它使用JSON格式发送消息(我是对的吗。有没有一种方法可以在blazor WebAssembly中使用这种服务器端blazor通信?或者,您建议什么是客户端-服务器通信的最佳解决方案?(快速通信、嵌套对象支持、字典支持等(我读过关于json、消息包、websocket的文章。非常感谢任何帮助;(
服务器集线器上的代码:
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();
}
在web组装应用程序中使用SIgnalR,我觉得这有点倒退。SignalR是一个javascript库,应用程序必须通过JSinterop写入数据。
这正是服务器端blazor应用程序所需要的,但对于web程序集,编写C#类并使用HttpClient类或ClientWebSocket类会更容易,它们在web程序集中也会做同样的事情。