gpt4 book ai didi

java - 您将如何在 Java Web 环境中实现 RSS 提要?

转载 作者:行者123 更新时间:2023-12-05 00:38:06 25 4
gpt4 key购买 nike

我正在为协作平台实现 RSS 提要。假设有数千个不同的协作室供用户共享信息,每个协作室都需要发布包含新闻、更改等的 RSS 提要......

使用普通 servlet(即 http://www.site.com/RSSServlet/?id=roomID)的成本很高,每次 RSS 客户端调用 servlet 时(这将发生在每个注册到 RSS 提要的用户每 10 分钟一千个房间之一)这将触发整个 servlet 生命周期,代价高昂。

另一方面,在硬盘空间和 IO 操作方面,为数千个房间中的每一个在磁盘上保留一个静态 XML 文件的成本也很高......

还有一个限制 - 使用现有框架可能不是一种选择...

那么,您将如何在 Java 环境中实现 RSS 提要?

最佳答案

您说对您的 servlet 的新 http 请求“将触发整个 servlet 生命周期”,正如 Alexander 已经指出的那样,这并不完全正确。它只会触发对您的 doGet()doPost() 方法的另一个方法调用。

我认为您的意思是,如果您有一个 doGet/doPost 方法,其中包含从头开始构建 RSS 提要所需数据的代码,那么每个请求都会一遍又一遍地触发这种数据获取。

如果这是您的顾虑,并且您正在排除静态内容,只需修改您的 Servlet doGet/doPost 方法以缓存您本来会返回的 RSS 内容,因此,处理每个请求并不意味着重新获取所有数据。

例如

public void doGet(HttpServletRequest request, HttpServletResponse response) {
//build the objects you need for the RSS response
Room room = getRoom(request.getParameter("roomid"));
//loadData();
//moreMethodCalls();
out.println( createRssContent(...) );
}

变成

Map rssCache;

public void doGet(HttpServletRequest request, HttpServletResponse response) {

//Map is initialized in the init() method or somewhere else
String roomId = request.getParameter("roomid");

String rssDocument = rssCache.get(roomId);
if (rssDocument == null) {

//build the objects you need for the RSS response
Room room = getRoom(roomId);
//loadData();
//moreMethodCalls();
rssDocument = createRssContent(...);
rssCache.put(roomId, rssDocument);
}
out.println( rssDocument );
}

如果您只想将项目存储在“缓存”中一段时间​​,您可以使用十几种不同的缓存框架中的一种,但这里的想法是,您不需要重构您所需的整个对象图。每个 http 请求的 RSS 响应。如果我正在阅读您的原始问题,那么我认为这就是您希望实现的目标。

关于java - 您将如何在 Java Web 环境中实现 RSS 提要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/195537/

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