首页 > 解决方案 > Mercure & Event Source Polyfill:错误:45000 毫秒内没有活动。收到 2 个字符。重新连接

问题描述

我有一个 symfony / api 平台服务器。我添加了 Mercure 以将 SSE 发送到 API 客户端。在我的客户端,我使用事件源 Polyfill 进行订阅。

我设法接收消息,但出现以下错误:

错误:45000 毫秒内没有活动。收到 2 个字符。重新连接。

我读到需要心跳来保持连接并避免此错误。

然后我将心跳指令添加到集线器命令行:

SERVER_NAME=:3000 MERCURE_PUBLISHER_JWT_KEY='toto' MERCURE_SUBSCRIBER_JWT_KEY=$(cat ../config/jwt/public.pem) MERCURE_SUBSCRIBER_JWT_ALG=RS256 HEARTBEAT_INTERVAL=15s READ_TIMEOUT=2m ./mercure run -config Caddyfile.dev

但没有任何改变。我仍然有这个错误。

我错过了什么?

谢谢您的帮助

标签: symfonyheartbeatmercure

解决方案


您需要在Caddyfile=>中添加以下配置heartbeat 15s

route {
    encode zstd gzip

    mercure {
        # Transport to use (default to Bolt)
        transport_url {$MERCURE_TRANSPORT_URL:bolt://mercure.db}
        # Publisher JWT key
        publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG}
        # Subscriber JWT key
        subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG}
        
        heartbeat 15s
        
        # Extra directives
        {$MERCURE_EXTRA_DIRECTIVES}
    }

    respond /healthz 200

    respond "Not Found" 404
}

推荐阅读