HTTP长轮询是否支持心跳消息?

时间:2015-06-19 09:20:57

标签: http long-polling cometd

我正在使用HTTP长轮询将服务器事件推送到客户端。

在客户端,我向服务器发送一个长轮询请求并在那里阻止等待来自服务器的事件。

在服务器端,我们使用了cometd框架(我在客户端,对服务器端并不是很了解)。

问题是,经过一段时间后,连接断开,客户端无法检测到这种情况,因此它会永久阻止。我们正在尝试实现某种心跳消息,该消息将每隔N分钟发送一次以保持连接活动。但这似乎不起作用。

我的问题是:HTTP长轮询是否支持心跳消息?据我所知,HTTP长轮询只允许服务器发送一个事件,然后立即关闭连接。客户端必须重新连接并发送新请求才能接收下一个事件。是否有可能服务器每隔N分钟发送一次心跳消息,同时仍然保持连接打开,直到真正的服务器事件发生?

1 个答案:

答案 0 :(得分:0)

如果您使用CometD框架,那么它会负责通知应用程序(在客户端和服务器上)关于连接何时中断,并且它确实发送心跳消息。

你所说的" HTTP长轮询"只是一个普通的HTTP请求,因此本身不支持心跳消息。 您可以使用HTTP长轮询请求来实现心跳消息,这就是CometD为您做的事情。

在CometD中,对HTTP长轮询请求的响应可能会传递多条消息,之后的连接将被关闭。客户端将发送另一个HTTP长轮询请求,而无需重新连接,可能重用以前的连接。

CometD为您的应用程序提供了一个独立于传输的更高级API,因此您可以使用WebSocket而不是HTTP,这样可以提高效率,而无需更改应用程序中的单行。

您需要在客户端(javascriptjava)和server上使用CometD库,一切都会正常工作。