我有一个使用SSE向已连接客户端发送更新的node.js服务器。偶尔,我会收到服务器错误H27。同时,其他客户端请求可能会丢失,可能是因为客户端正在重新注册到SSE事件服务。
客户端GET /event请求和服务器H27错误之间经过的时间在13秒到19:35分钟之间(在30个不同的出现中)。但是,GET /event请求的时间和相应的H27错误之间有完全的相关性。 我从服务器每50秒发送一条保持活动状态的消息,以解决Heroku 55秒超时限制的问题。
以下是我在Heroku日志中得到的完整警告示例: 2020-10-17T08:49:04.525770+00:00 heroku[router]: sock=client at=warning code=H27 desc="Client Request Interrupted" method=GET path="/event" host=appname.herokuapp.com request_id=c4c4e2fd-16ca-4292-a27b-2a70b12b16fa fwd="77.138.167.76" dyno=web.1 connect=1ms service=9499ms status=499 bytes= protocol=https
它是由以下GET请求导致的: 2020-10-17T08:48:55.027638+00:00 app[web.1]: Client 8 registered
你有什么想法可以克服这个问题?我的问题是我的应用程序严重依赖于SSE,如果我现在必须切换到另一种机制(例如套接字),那将需要相当大的努力。
编辑: 进一步调查发现,这似乎是由于客户端无法在Heroku服务器上保持连接到Server Sent Events路由。虽然它可以建立第一个连接,但它无法保持连接。我怀疑这与Heroku请求超时和Heroku处理路由的方式有关。
我仍然没有找到解决这个问题的方法,所以每个人都可以随意评论。
客户端GET /event请求和服务器H27错误之间经过的时间在13秒到19:35分钟之间(在30个不同的出现中)。但是,GET /event请求的时间和相应的H27错误之间有完全的相关性。 我从服务器每50秒发送一条保持活动状态的消息,以解决Heroku 55秒超时限制的问题。
以下是我在Heroku日志中得到的完整警告示例: 2020-10-17T08:49:04.525770+00:00 heroku[router]: sock=client at=warning code=H27 desc="Client Request Interrupted" method=GET path="/event" host=appname.herokuapp.com request_id=c4c4e2fd-16ca-4292-a27b-2a70b12b16fa fwd="77.138.167.76" dyno=web.1 connect=1ms service=9499ms status=499 bytes= protocol=https
它是由以下GET请求导致的: 2020-10-17T08:48:55.027638+00:00 app[web.1]: Client 8 registered
你有什么想法可以克服这个问题?我的问题是我的应用程序严重依赖于SSE,如果我现在必须切换到另一种机制(例如套接字),那将需要相当大的努力。
编辑: 进一步调查发现,这似乎是由于客户端无法在Heroku服务器上保持连接到Server Sent Events路由。虽然它可以建立第一个连接,但它无法保持连接。我怀疑这与Heroku请求超时和Heroku处理路由的方式有关。
我仍然没有找到解决这个问题的方法,所以每个人都可以随意评论。
code=H27 desc="Client Request Interrupted"
的错误。我整天都在为此问题苦恼,因为我以为是我的代码有问题,但我认为这是一个Heroku特定的问题。你有没有碰巧使用任何Heroku附加组件? - philosopher