有一个demo by IBM展示了在DWR2中使用反向AJAX是多么容易。另一方面,Scala/LIFT带有内置的反向AJAX功能。
发布于 2010-06-29 06:35:27
Lift的Comet架构,Novell在评估了许多不同的技术后,选择它来驱动他们的Pulse产品。
Lift的Comet实现使用单个HTTP连接来轮询页面上任意数量的组件的更改。每个组件都有一个版本号。长轮询包括版本号和组件GUID。在服务器端,监听程序附加到长轮询请求中列出的所有GUID。如果任何组件具有更高的版本号(或者版本号在长轮询期间增加),则增量(描述每个版本的更改的一组JavaScript )被发送到客户端。将应用增量,并将客户端上的版本号设置为变更集的最高版本号。
Lift将长轮询与会话管理集成在一起,因此,如果在长轮询期间请求进入同一URL,会导致连接匮乏,长轮询将被终止以避免连接匮乏(某些浏览器在每个命名服务器上最多有2个HTTP连接,而其他浏览器最多有6个)。Lift还支持针对长轮询请求的DNS通配符服务器,以便浏览器中的每个选项卡可以针对不同的DNS通配符服务器执行长轮询。这避免了连接匮乏问题。
Lift动态检测运行Servlet的容器,Jetty 6&7和Glassfish (很快),Lift将使用平台的"continuations“实现,以避免在长轮询期间使用线程。
Lift的JavaScript可以位于jQuery和YUI之上(也可以位于Prototype/ sit之上)。实际的轮询代码包括连接失败时的退避和其他处理瞬时连接失败的“优雅”方法。
我看过Atmosphere、CometD、Akka (所有面向JVM虚拟机的Comet技术)。没有一个(在我评估它们的时候)支持每页多个组件或避免连接匮乏。
Novell从零开始,出于一些非常好的原因选择了Lift to power Pulse。
在安全性方面,Lift轻松击败了Spring + Spring security。请参阅http://www.mail-archive.com/liftweb@googlegroups.com/msg13020.html
基本上,Lift的安全性已经包含在您的应用程序中。默认情况下,Lift应用程序可以抵抗常见问题(跨站点脚本、重放攻击、跨站点请求伪造)。默认情况下,Lift应用程序可以防止参数篡改。Lift的sitemap定义了站点导航和访问控制规则。这意味着你永远不会有别人不能点击的链接。你不需要有一个外部过滤器(例如,Spring Security),你必须独立于你的应用程序进行配置(哇...移动了一个页面,但忘记了确保Spring Security XML文件已更新。)
哦..。如果你不想使用模板语言,这里有一个完整的Lift Comet聊天组件:
class Chat extends CometActor with CometListener {
private var msgs: List[String] = Nil
def registerWith = ChatServer
override def lowPriority = {
case m: List[String] => msgs = m; reRender(false)
}
def render = {
<div>
<ul>
{
msgs.reverse.map(m => <li>{m}</li>)
}
</ul>
<lift:form>
{
SHtml.text("", s => ChatServer ! s)
}
<input type="submit" value="Chat"/>
</lift:form>
</div>
}
}
并将此代码插入到页面中:<lift:comet type="Chat"/>
发布于 2010-06-24 16:26:19
AJAXed
这就是我在COMETed中构建Scala RIA时要用到的:
- [Jersey](http://jersey.java.net/) (lightweight RESTful services to communicate with JS UI over HTTP/JSON) + [Atmosphere](https://atmosphere.dev.java.net/) (scalable solution for building COMETed applications) + any JS framework (jquery, YUI, ext js, ...). You should also have a look at [Akka Framework](http://doc.akkasource.org/), which is integrated with the both Jersey and Atmosphere, and allows you building RIA web-apps in idiomatic Scala. Here's a [pub-sub COMET example](http://doc.akkasource.org/comet) in Akka.
- [Vaadin](http://vaadin.com/home) + [ICEPush](http://vaadin.com/directory#addon/icepush). It will be much comfortable combination for you, if you don't want to get your hand dirty with JS (though ICEpush is not an enterprise-ready solution yet).
发布于 2011-01-17 22:22:52
另一种选择是以纯Java (或任何其他JVM语言,包括Scala)为中心的ItsNat Comet。
https://stackoverflow.com/questions/3106054
复制相似问题