【发布时间】:2011-08-15 16:39:15
【问题描述】:
我看了一下 Servlet 3.0 的服务器推送实现的简要概述 here 并留下了比我来的更多的问题。这些问题与我的用例有关:在“朋友”之间实现动态通知系统,例如 Facebook。从概念上考虑问题,我会这样处理:
- 在每个 页面,包含发出的代码 XMLHttpRequest “get” 请求到 服务器
- 允许服务器存储 相关的请求/响应对象 这些类型的 XMLHttpRequests 在 应用范围的地图(与 AsyncContext 的帮助和 .startAsync()),由用户的键控 网站 ID
- 每当用户进行操作时 产生通知,查询 应用程序范围的 ID 的映射 用户的朋友,并使用 存储在那里的响应对象,发送 通知给每个朋友。
- 每个朋友都会收到 通知和无限循环 在他们有问题的页面上 再次 XMLHttpRequests(由于无限循环)
假设我的系统在概念上是合理的(如果不是,请告诉我出了什么问题),我发现这个系统存在几个问题:
请求/响应会发生什么 响应后在地图中配对 用来?我应该手动 从地图中删除它,或等待 客户端发送的循环 另一个请求,因此存储 请求/响应对象对可以是 替换为与 新的 XMLHttpRequest?链接 上面使用了“承诺”和 “未承诺”是指 响应对象。有人可以 解释这些词的意思 这种情况(我有一种感觉 它们与寿命有关 响应对象)?
如果用户的两个或多个朋友同时参与导致通知的操作,会发生什么情况?每个用户只存储一个请求/响应对。无论哪个朋友的操作碰巧找到了有问题的用户,请求/响应对都会将其通知发送给该用户,但是其他朋友的操作呢?如果它们都同时发生,那么在用户发送另一个 XMLHttpRequest 以存储在地图中之前,其他操作将没有用于发送通知的请求/响应对。据推测,其他操作将解析地图并且找不到该用户的条目(因为在其他操作使用响应后手动删除了它),或者找到已经使用的“陈旧”请求/响应对象。我假设一个响应对象不能用于两个不同的响应,那么有人将如何解决这个问题?
如果通知是 当用户被发送给用户时 切换页面?如果我们完全看 加载网页作为打开的窗口 用于接收通知请求, 和一个加载一个作为关闭的窗口 (因为它无法接收和 处理响应 前面发送的 XMLHttpRequests 页),期间发送的通知 这个时间框架将会丢失。是 有什么我可以做的 在数据库中查询新的 动作和生成通知 页面加载时那样吗?
最后,当用户 导航离开网站和 会话过期?我们是否期望 周期性地遍历地图 并删除与 没有现有的会话?
对不起,如果这是一个长篇阅读。即使您只能回答上述问题之一,它也会有所帮助!
【问题讨论】:
标签: jquery servlets jakarta-ee comet long-polling