首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高ServiceStack服务器事件的效率

问如何提高ServiceStack服务器事件的效率
EN

Stack Overflow用户
提问于 2016-05-10 06:58:33
回答 2查看 311关注 0票数 2

我正在考虑用ServiceStack服务器事件替换我们的定期轮询网页,但从行为上看,服务器事件机制实际上比我们所做的要多得多-在我们的例子中,返回消息是几百字节,每五秒才轮询一次-而心跳是每隔几秒496字节,eventstream长轮询看起来比平均水平还要多。每个客户端的合并可能为2-3Kbps。

我不太关心延迟,但我确实关心连接的数量和传输的字节数。有没有什么配置可以让基于javascript的客户端更高效一些?

代码语言:javascript
复制
    var source = new EventSource(
       '/event-stream?channel=someUpdate&t=' + new Date().getTime());
   $(source).handleServerEvents({
       receivers: {

           some: {
               Update: function(id) {
                   alert(id);
               }

           }
       },
   });
EN

回答 2

Stack Overflow用户

发布于 2016-05-10 08:02:31

SSE Server Events连接对每个订阅只使用一个HTTP长连接,并且事件本身比轮询效率高得多,因为它只发送事件数据,而不是每次发送新的HTTP请求和重复的HTTP头的开销。

听起来像是在测量用于检测SSE连接是否仍然有效的心跳,哪个uses the following defaults

代码语言:javascript
复制
IdleTimeout = TimeSpan.FromSeconds(30);
HeartbeatInterval = TimeSpan.FromSeconds(10);

请注意,每个客户端的心跳数保持不变,即它们不会更改连接的客户端是否每秒接收多个事件-客户端仍然每10秒只发送一个心跳。

我们有客户使用这些默认值处理数千个并发连接,但您可以在注册ServerEventsFeature时更改心跳间隔,例如,您可以使用以下命令将间隔增加一倍:

代码语言:javascript
复制
Plugins.Add(new ServerEventsFeature {
   IdleTimeout = TimeSpan.FromSeconds(60),
   HeartbeatInterval = TimeSpan.FromSeconds(20),
});
票数 2
EN

Stack Overflow用户

发布于 2016-05-11 16:32:55

要从心跳中减少一点带宽,您可以覆盖ServerEventsFeature OnCreated方法来剥离默认的profileUrl,因为这可能是心跳事件中相当大的一部分,假设您没有使用它的。例如,

代码语言:javascript
复制
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);
    }
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37126730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档