我正在考虑用ServiceStack服务器事件替换我们的定期轮询网页,但从行为上看,服务器事件机制实际上比我们所做的要多得多-在我们的例子中,返回消息是几百字节,每五秒才轮询一次-而心跳是每隔几秒496字节,eventstream长轮询看起来比平均水平还要多。每个客户端的合并可能为2-3Kbps。
我不太关心延迟,但我确实关心连接的数量和传输的字节数。有没有什么配置可以让基于javascript的客户端更高效一些?
var source = new EventSource(
'/event-stream?channel=someUpdate&t=' + new Date().getTime());
$(source).handleServerEvents({
receivers: {
some: {
Update: function(id) {
alert(id);
}
}
},
});发布于 2016-05-10 08:02:31
SSE Server Events连接对每个订阅只使用一个HTTP长连接,并且事件本身比轮询效率高得多,因为它只发送事件数据,而不是每次发送新的HTTP请求和重复的HTTP头的开销。
听起来像是在测量用于检测SSE连接是否仍然有效的心跳,哪个uses the following defaults
IdleTimeout = TimeSpan.FromSeconds(30);
HeartbeatInterval = TimeSpan.FromSeconds(10);请注意,每个客户端的心跳数保持不变,即它们不会更改连接的客户端是否每秒接收多个事件-客户端仍然每10秒只发送一个心跳。
我们有客户使用这些默认值处理数千个并发连接,但您可以在注册ServerEventsFeature时更改心跳间隔,例如,您可以使用以下命令将间隔增加一倍:
Plugins.Add(new ServerEventsFeature {
IdleTimeout = TimeSpan.FromSeconds(60),
HeartbeatInterval = TimeSpan.FromSeconds(20),
});发布于 2016-05-11 16:32:55
要从心跳中减少一点带宽,您可以覆盖ServerEventsFeature OnCreated方法来剥离默认的profileUrl,因为这可能是心跳事件中相当大的一部分,假设您没有使用它的。例如,
Plugins.Add(new ServerEventsFeature
{
StreamPath = "/event-stream",
HeartbeatPath = "/event-heartbeat",
UnRegisterPath = "/event-unregister",
SubscribersPath = null,
LimitToAuthenticatedUsers = false,
NotifyChannelOfSubscriptions = false,
OnCreated = (subscription, request) =>
{
subscription.Meta.Remove(AuthMetadataProvider.ProfileUrlKey);
}
});https://stackoverflow.com/questions/37126730
复制相似问题