为了使用Liferay中的chat功能,除了要建立一台jabber server之外,还需要启动两个属性
jabber.xmpp.server.enabled=true
reverse.ajax.enabled=true
jabber.xmpp.server.enabled比较好理解,reverse.ajax.enabled是什么?
在Liferay 4.2的chat有个特点。即使用户没有chat portlet的权限,当有其他人员向其发送chat消息时,会立即弹出一个chat消息框。
该消息框的实现就是用了reverse ajax。我们可以trace一下liferay的代码看看这个自动弹出的chatbox是如何实现的。
首先找到ajax.js
找到里面有
request: function() {
...
onComplete: ReverseAjax.response,
...
},
response: function(xmlHttpRequest) {
...
ReverseAjax.request();
...
},
写过点ajax的朋友都能猜出来,这两段是干什么的。一旦一个ajax请求发起,如果正常结束,那么在responnse方法中重新再发起一次请求。
吓人一跳,liferay不会那么没效率吧,当中都没有个延迟??
再找java代码ReverseAjaxAction.java 在不起眼的代码中,有这么一行
reqWait.waitForRequest();看看waitForRequest的定义
public synchronized void waitForRequest() throws InterruptedException {
int heartbeatCycle = GetterUtil.getInteger(PropsUtil.get(
PropsUtil.REVERSE_AJAX_HEARTBEAT));
_timedOut = true;
wait(heartbeatCycle);
}
大有玄机!!找找notify是被谁调用的代码......
BinGo!!
RosterUpdateListener和MessageListener中有reqWait.notifyWait()
让我们重新理一下思路
两条主线
ajax.js中ReverseAjax.request()->ReverseAjaxAction.java->reqWait.waitForRequest()
RosterUpdateListener|MessageListener->reqWait.notifyWait()
在浏览器中一直有一个请求,但是当请求到服务端端时,被java阻塞了。
当有jabber消息返回时,则会notify前一个被阻塞的线程,最终使得浏览器端的ajax代码将chatbox显示出来。
最终,我们得出一个结论,liferay 中ReverseAjax是用poll来模拟push。但是poll过程中利用了java线程同步的技巧。
当然以上的分析还很粗糙。没有解释线程同步之间的资源和超时的设计,本文就算起个抛砖引玉的作用吧。
分享到:
相关推荐
**标题:“Liferay 4.2 和Openfire的组合使用”** 在IT行业中,集成不同的软件和服务以构建高效的企业级解决方案是一项常见的任务。本话题主要关注如何将Liferay Portal 4.2与Openfire即时通讯服务器相结合,以提供...
在本文中,我们将深入探讨如何配置Liferay 4.2.0版本,这是一个知名的开源企业级门户平台。根据描述,虽然官方文档可能是针对4.3.5版本的,但据称4.2.0版本与之仅有微小差异。我们将重点关注如何在Eclipse集成环境中...
在Liferay 6中,使用Ajax技术来处理Portlet请求是一种常见的优化用户交互的方法。Ajax(Asynchronous JavaScript and XML)允许部分页面更新,无需整个门户页面的刷新,从而提升了用户体验,尤其是在Portlet环境下。...
使用liferay框开发ajax 的Demo
本文将深入探讨“基于serverResource方式的Liferay中Ajax方式的实现”,结合提供的标签“源码”和“工具”,我们将讨论如何利用Liferay的API和Ajax技术来创建动态交互的Web页面。 在Liferay中,serverResource是一...
环境搭建 一、资源准备 以上资源内容可以在Liferay的官方网站下载, 1 liferay-plugins-sdk-6.1.1...经过上面的三步,在Liferay IDE(Eclipse 4.2)的下方的server面板处,可以看到Liferay 6.1 CE Server,现在点击运行
Liferay Portal Liferay IDE
Liferay是一款开源的企业级门户平台,它提供了丰富的功能和高度可定制性,广泛应用于构建企业网站、内部系统、协作平台等。在这个“liferay详细讲解 liferay项目完全讲解”的资料包中,我们可以期待深入了解到关于...
### Liferay环境搭建详解 #### 一、简介 Liferay是一款功能强大的开源企业级门户平台,主要用于...掌握这些基本操作后,您可以进一步探索Liferay的高级特性,如主题开发、服务构建等。希望本文档对您的学习有所帮助!
标题 "Liferay扩展环境 Liferay Ext" 涉及到的是Liferay门户平台的一个关键概念,Liferay Ext是用于扩展和定制Liferay功能的核心工具。Liferay是一个开源的企业级内容管理平台,它允许用户根据需求构建自定义的数字...
### Liferay快速入门知识点详解 #### 一、Liferay Portal简介与快速启动 ...无论是对于希望快速搭建企业门户的用户,还是想要深入探索Liferay开发的开发者,这份快速入门指南都是一个不可或缺的资源。
- 它的界面设计是基于 Web 服务的,允许通过 Ajax 技术实现动态交互。 2. **portlet 开发**: - Portlet 是 Liferay 中的基本组件,它可以是一个网页、应用程序或内容的展示单元。 - Liferay 支持多种portlet ...
- **JavaScript/Ajax**:前端交互。 - **HTML/CSS**:页面布局和样式。 - **XML**:配置文件等。 ##### 3. 扩展与定制 Liferay 6.0 提供了丰富的扩展和定制选项: - **主题定制**:通过创建自定义主题来改变门户...
开发者将学习到如何处理portlet的事件、配置参数,以及如何利用Ajax增强portlet的交互性。同时,文档还会讨论portlet的安全性和性能优化策略,确保portlet在生产环境中的稳定运行。 文档三:《Liferay Theme ...
7. **集成与API**:探索Liferay的API和Service Builder,了解如何与其他系统进行集成。 8. **扩展与插件**:了解Marketplace中的可用插件,以及如何开发自己的插件来扩展Liferay的功能。 **最佳实践** 在使用...
【Liferay 6 入门教程】 Liferay是一款开源的企业级门户平台,广泛用于构建企业网站、社交网络和协作工具。Liferay 6是其一个重要的版本,提供了丰富的功能和改进,包括更好的用户体验、增强的社区参与度以及更强大...