gpt4 book ai didi

asp.net - 如何在 Web 应用程序中使用 ServiceStack Redis 以利用发布/订阅范例

转载 作者:IT王子 更新时间:2023-10-29 05:56:36 25 4
gpt4 key购买 nike

我对 Pub/Sub 范例 感兴趣,以便提供一个通知系统(即:像 Facebook),尤其是在具有发布者的网络应用程序中(在同一个 Web 服务器 IIS 上的多个 Web 应用程序)和一个或多个订阅者,负责在 Web 上显示前端用户的通知。

我发现了 Redis,它似乎是一个很棒的服务器,它提供了有趣的功能:缓存(如 Memcached)、Pub/Sub、队列。

不幸的是,除了 WebSockets 和 NodeJS,我没有在 Web 上下文(ASP.NET,使用 Ajax/jQuery)中找到任何示例,但我不想使用那些(太早了)。我想我需要一个从发布者接收消息的进程(订阅者),但我不知道如何在 Web 应用程序中执行此操作(发布/订阅在单元测试中运行良好)。

编辑:我们目前使用 .NET (ASP.NET Forms) 并试用 ServiceStack.Redis 库 (http://www.servicestack.net/)

最佳答案

实际上,Redis Pub/Sub 可以很好地处理这种情况,因为 Redis 是一个异步非阻塞服务器,它可以廉价地容纳许多连接并且可以很好地扩展。

Salvatore(又名 Mr Redis :) describes the O(1) time complexity of Publish and Subscribe operations :

You can consider the work of subscribing/unsubscribing as a constant time operation, O(1) for both subscribing and unsubscribing (actually PSUBSCRIBE does more work than this if you are subscribed already to many patterns with the same client).

...

About memory, it is similar or smaller than the one used by a key, so you should not have problems to subscribe to millions of channels even in a small server.

因此,Redis 不仅有能力为这种情况设计,而且正如 Tom 指出的那样,为了保持持久连接,用户将需要长时间运行的连接(又名 http-push/long-poll)和每个事件用户将采用自己的线程。持有一个线程对于可伸缩性来说不是很好,从技术上讲,你最好使用像 Manos de Mono 这样的非阻塞 http 服务器。或 node.js它们都是异步和非阻塞的,可以处理这种情况。注意:WebSockets 对于通过 HTTP 的实时通知更有效,因此理想情况下,如果用户浏览器支持它,您将使用它,如果不支持,则回退到常规 HTTP (or fallback to use Flash for WebSockets on the client)。

因此,这里不能扩展的不是 Redis 或其 Pub/Sub,而是线程 HTTP 服务器(如 IIS 或 Apache)的并发连接数是限制,也就是说你仍然可以支持相当数量使用 IIS ( this post suggests 3000 ) 的并发用户数,并且由于 IIS 是瓶颈而不是 Redis,您可以轻松地将额外的 IIS 服务器添加到组合中并分配负载。

关于asp.net - 如何在 Web 应用程序中使用 ServiceStack Redis 以利用发布/订阅范例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6437741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com