You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Blazor Server应用在设备待机唤醒后需刷新才能响应?

Blazor Server安卓PDA待机唤醒后无响应的解决办法

一、配置SignalR客户端自动重连

Blazor Server依赖SignalR维持通信,PDA待机时网络连接断开后,需让客户端自动触发重连。在_Host.cshtml的Blazor脚本引用后添加自定义重连逻辑:

<script src="_framework/blazor.server.js"></script>
<script>
  Blazor.start({
    configureSignalR: function (builder) {
      builder.withAutomaticReconnect([0, 2000, 5000, 10000]); // 按0秒、2秒、5秒、10秒的间隔尝试重连
    }
  });
</script>

该配置覆盖默认重连策略,让客户端在连接断开后主动尝试恢复。

二、优化服务端Hub配置

调整现有Hub选项,适配PDA唤醒后的网络延迟:

services.AddRazorPages();
services.AddServerSideBlazor()
.AddHubOptions(options =>
 {
     options.ClientTimeoutInterval = TimeSpan.FromMinutes(120);
     options.KeepAliveInterval = TimeSpan.FromSeconds(15);
     options.HandshakeTimeout = TimeSpan.FromSeconds(30); // 延长握手超时时间,避免唤醒时握手失败
     options.MaximumReceiveMessageSize = 1024 * 1024; // 可选:增大消息大小限制,防止重连时因消息过大失败
 });

三、在Blazor组件中监听网络状态

在全局组件(如MainLayout.razor)中添加网络状态监听,网络恢复时触发组件刷新:

@inject IJSRuntime JSRuntime
@implements IAsyncDisposable

@code {
  private IDisposable? _onlineSubscription;
  private IDisposable? _offlineSubscription;

  protected override async Task OnAfterRenderAsync(bool firstRender)
  {
    if (firstRender)
    {
      // 监听网络上线事件
      _onlineSubscription = await JSRuntime.InvokeAsync<IDisposable>(
        "addEventListener", "online", async () =>
        {
          StateHasChanged();
          // 自动重连失效时,手动触发SignalR重连
          await JSRuntime.InvokeVoidAsync("Blazor.reconnect");
        });

      // 监听网络下线事件(可做状态提示)
      _offlineSubscription = await JSRuntime.InvokeAsync<IDisposable>(
        "addEventListener", "offline", () =>
        {
          StateHasChanged();
          return Task.CompletedTask;
        });
    }
  }

  public async ValueTask DisposeAsync()
  {
    _onlineSubscription?.Dispose();
    _offlineSubscription?.Dispose();
  }
}

四、优化安卓PDA系统设置

安卓系统的电池优化和后台限制会导致浏览器待机时被断网或冻结,需做以下设置:

  • 将使用的浏览器(如Chrome、Edge)加入电池优化白名单,禁止系统后台限制其网络与活动
  • 开启浏览器的后台活动权限,允许其待机时保持网络连接
  • 部分设备有“应用保活”功能,将浏览器设为受保护应用

五、验证重连逻辑

部署修改后测试流程:

  1. 打开Blazor应用,进入PDA待机状态
  2. 等待5-10分钟后唤醒PDA
  3. 检查页面是否自动恢复响应,无需手动刷新

内容的提问来源于stack exchange,提问作者Dany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:30:03