`
pijunliang
  • 浏览: 99072 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一个WEB的IM,基于Pushlet实现,开发心得二

阅读更多
此文章有一定难度,主要面向对JAVA技术有一定了解的技术人员;谢谢大家长期关注IM。因为这段时间工作比较忙,也没有腾出时间来修改IM(IM代码跟公司核心源码 有一定的关联,所以上次没有将源码附加上去,这次做了些修改,但也只是个DEMO,希望大家谅解)。有兴趣的可以加 pijunliang@hotmail.com 一起探讨 WEB 的 IM。
首先,框架主要有:struts 1.2.9 ,spring 2.0 , hibernate 3.2.1
其次,在树形菜单的展示中也是一个亮点,(dhtmlxtree and dtree) ,动态加载树 和 javascript面向对象。例子中有实现。
最后 ,说明如何运行附件:
环境: windowXP、tomcat 5.0 、jdk 5.0 、oracle 9i
将附件root.rar 解压到 tomcat5.0/webapps/ 例如我的是:D:\Tomcat 5.0\webapps\ROOT\
需要注意的是:这个附件中没有带入LIB包目录,因为框架要用到的包太多、太大,如果你本地有那些包不需要下载,直接拷过去就可以了,要是不行那就辛苦点!下载完后,在WEB-INF 下面新建个lib 目录。然后将所有的包拷贝进去。(D:\Tomcat 5.0\webapps\ROOT\WEB-INF\lib )
因为服务器和数据库是在同一台机器中,所以URL是localhost,如果需要改动那么是在D:\Tomcat 5.0\webapps\ROOT\WEB-INF\classes\config \下的connection.properties。数据库的登陆的名字和密码也是在这里修改
改好数据库后 然后就是启动tomcat服务了,系统在第一次启动时默认会自动初始化数据库,并插入默认的数据。用户名字是 test00 / test01/ test02/test03/test10/……密码所有的都是1234
参见数据库表userinfo. 然后依次登陆进去就能看到IM效果
这次IM存在问题:可能就是组织和用户那里会出问题。因为这块跟已有的项目集成,所以今天临时搭建起来的,如果不需要可以去掉,主要体现在 pphome包下。因为时间比较匆忙,所以存在缺失,欢迎批评指正。
下期计划:对每个登陆进来用户实行监控,具体落实到每个新登陆用户能自动更换图片。并主动将自己登陆消息发送给其它好友,并在好友列表中更新显示图片
       聊天的主界面,也就是PUSHLET核心技术chat.jsp (D:\Tomcat 5.0\webapps\ROOT\chat\chat.jsp) 加入表情,加入显示文字的 大小 、颜色 、字体 ,并加入聊天背景图片。都是可以实现的。仿照QQ 和MSN来做。
揭秘 pushlet (WEB 的 IM 核心部分)
首先,ajax-pushlet-client.js :
  这个JS 第1, 需要初始化一些参数,例如: p_load();
第2,是加入监听,也就是 p_join_listen ('1234') (里面的参数可以动态设置);注意这个方法,它其实做了2件事情,先是加入,然后监听,如果2者关系混淆了会出JS错误。注意这里:Pushlet 底层实现我曾经遇到兼容性问题。就是出现在这个方法中。同样是IE6,有的能出来有的就不能出来,但是FIREFOX就没有出现过这样的问题。问题是 在p_join_listen 的请求的时候(xmlhttprequest 异步的方式),他在JOIN的时候发生死锁。后来改掉了PUSHLET的源码问题就解决了,如果有遇到这样问题的可以查下PUSHLET的类和属性文件。
第3,就是围绕这个监听 互相之间传送消息,
p_publish('1234', 'action', 'send', 'nick', ‘name’, 'msg', ‘hello word!’);
 第1个参数是说明监听在1234上。
第2个参数是PUSHLET自带的一个参数,必须是action。
第3个参数,是说明当前动作是 发送消息
第4个参数 说明是发送人字段(可以换)
第5个参数是 发送人的名字
第6个参数 说名 消息 字段 (可以换)
第7个参数 是消息内容 
所有内容Pushlet 都有着自己的解析规范的,详细的请参看源码!
第4,就是退出监听
注意这里也有2个方法
p_publish('1234', 'action', 'exit', 'nick', nick);
p_leave();
页面上加入这些JS代码后就可以做到监控了。
值得在这里总结的是 ,用PUSHLET的好处是:如果有页面需要做人员访问监听的时候,最适合的就是PUSHLET。    
其次是 PUSHLET源码的介绍,nl.justobjects.pushlet.servlet. Pushlet
这个SREVLET 是所有请求的入口。所有请求都会调用doGet();然后根据不同的请求返回不同的内容。都是通过RESPONSE的方式。
原理大概介绍:每个pushlet的监听对应着一个 SessionManager
然后每个 监听下 的人对应着一个 Subscriber
每个人发送消息都会经过SessionManager ,然后利用请求时间差, 将消息 推送到当前监听下的所有用户,包括自己。

如果能利用好PUSHLET,其实可以做好很多事情的。期待能再次空下来,对WEB的IM升级,然后一起跟大家分享。如果真的深入了解pushlet,你会在这里找到很多乐趣!谢谢

http://pijunliang.iteye.com/blog/89158 这里是IM的一些需求分析

 

 

lib包下载方式:(可能需要先登陆)没办法,包太多了,必须这样上传,就必须辛苦点下载

http://pijunliang.iteye.com/topics/download/620de644-7773-4658-97da-1729f027a6f7

http://pijunliang.iteye.com/topics/download/0a7c7e47-de6b-474b-982c-ee519861aa78

http://pijunliang.iteye.com/topics/download/4d4d0ccc-8815-4ea5-8f3d-26a74ebc6294

http://pijunliang.iteye.com/topics/download/6a45184a-c5ee-4ccd-b79d-4ea1a4f1aed2

http://pijunliang.iteye.com/topics/download/c21021ca-c177-4b49-a5e2-7de7d04d288b

 

 

新增加一个platcore 包。导入到本地工程目录中

http://pijunliang.iteye.com/topics/download/2c452eef-7436-3571-9f72-8fa56bb95334

  • src.rar (202.7 KB)
  • 描述: 源码
  • 下载次数: 4856
  • lib.rar (4 MB)
  • 描述: lib目录下的JAR包
  • 下载次数: 5998
分享到:
评论
34 楼 weihengwang 2014-06-16  
[color=red][/color]
33 楼 zhachunling 2014-05-27  
对每个登陆进来用户实行监控,具体落实到每个新登陆用户能自动更换图片。并主动将自己登陆消息发送给其它好友,并在好友列表中更新显示图片

这个做出来了吗?
32 楼 windy0605 2013-09-22  
明显源码不全,编译不过 orgmodel 在哪
31 楼 daichangfu 2013-07-05  
mark.
30 楼 Jason0623 2012-11-15  
没有数据库 根本无法运转啊.悲剧...
29 楼 cuisuqiang 2012-10-08  
够乱,看我的http://cuisuqiang.iteye.com/blog/1416771!另外,楼主传递中文时怎么办?
28 楼 chen_785 2012-06-27  
com.ecomm.platcore.struts 您的这个包下面的类貌似都没有。
27 楼 fhz1980 2012-06-04  
楼主文件不完啊
能不能发个全的啊
26 楼 azrael6619 2012-03-27  
老大。这个账号有什么条件吗?我基于你那个root已经发布成功了。但是登录弹出的时候就有错:
com.ecomm.chat.manager.ChatUserInfoManager.getInstance().updateChatUserInfoOnlineStateS(userid,"1");
麻烦看看,谢谢啊
25 楼 zqb666kkk 2012-03-19  
myeclipse 6.0项目 启动 的时候 一直 停留在 信息: Loading Spring root WebApplicationContext
INFO [org.springframework.core.CollectionFactory] - JDK 1.4+ collections available
INFO [org.springframework.core.CollectionFactory] - Commons Collections 3.x available
INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from file [C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\pushletTest\WEB-INF\classes\spring\applicationContext.xml]
INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from file [C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\pushletTest\WEB-INF\classes\spring\dataAccessContext-hibernate.xml]
INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from file [C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\pushletTest\WEB-INF\classes\spring\serviceContext.xml]
INFO [org.springframework.web.context.support.XmlWebApplicationContext] - Bean factory for application context [Root WebApplicationContext]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [propertyConfigurer,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor,org.springframework.aop.aspectj.AspectJExpressionPointcut,org.springframework.aop.aspectj.AspectJPointcutAdvisor,org.springframework.aop.aspectj.AspectJExpressionPointcut#1,org.springframework.aop.aspectj.AspectJPointcutAdvisor#1,txAdvice,dataSource,sessionFactory,transactionManager,chatMessageManager,chatGroupManager,chatUserInfoManager,chatRemindManager,chatListenManager,userManager,orgManager]; root of BeanFactory hierarchy
INFO [org.springframework.web.context.support.XmlWebApplicationContext] - 18 beans defined in application context [Root WebApplicationContext]
INFO [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer] - Loading properties file from URL [file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/pushletTest/WEB-INF/classes/config/connection.properties]
INFO [org.springframework.aop.framework.DefaultAopProxyFactory] - CGLIB2 available: proxyTargetClass feature enabled
INFO [org.springframework.web.context.support.XmlWebApplicationContext] - Bean 'org.springframework.aop.config.internalAutoProxyCreator' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO [org.springframework.web.context.support.XmlWebApplicationContext] - Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@ff65bf]
INFO [org.springframework.web.context.support.XmlWebApplicationContext] - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@22fde7]
INFO [org.springframework.ui.context.support.UiApplicationContextUtils] - Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.ResourceBundleThemeSource@1e31f72]
INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [propertyConfigurer,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor,org.springframework.aop.aspectj.AspectJExpressionPointcut,org.springframework.aop.aspectj.AspectJPointcutAdvisor,org.springframework.aop.aspectj.AspectJExpressionPointcut#1,org.springframework.aop.aspectj.AspectJPointcutAdvisor#1,txAdvice,dataSource,sessionFactory,transactionManager,chatMessageManager,chatGroupManager,chatUserInfoManager,chatRemindManager,chatListenManager,userManager,orgManager]; root of BeanFactory hierarchy]
INFO [com.mchange.v2.log.MLog] - MLog clients using log4j logging.
INFO [com.mchange.v2.c3p0.C3P0Registry] - Initializing c3p0-0.9.0.4 [built 23-January-2006 22:20:29 -0500; debug? true; trace: 10]
INFO [org.hibernate.cfg.annotations.Version] - Hibernate Annotations 3.2.1.GA
INFO [org.hibernate.cfg.Environment] - Hibernate 3.2.1
INFO [org.hibernate.cfg.Environment] - hibernate.properties not found
INFO [org.hibernate.cfg.Environment] - Bytecode provider name : cglib
INFO [org.hibernate.cfg.Environment] - using JDK 1.4 java.sql.Timestamp handling
INFO [org.hibernate.cfg.Configuration] - configuring from url: file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/pushletTest/WEB-INF/classes/config/hibernate.cfg.xml
INFO [org.hibernate.cfg.Configuration] - Reading mappings from resource : com/ecomm/chat/pojo/ChatUserInfo.hbm.xml
INFO [org.hibernate.cfg.Configuration] - Reading mappings from resource : com/ecomm/chat/pojo/ChatListen.hbm.xml
INFO [org.hibernate.cfg.Configuration] - Reading mappings from resource : com/ecomm/chat/pojo/ChatGroup.hbm.xml
INFO [org.hibernate.cfg.Configuration] - Reading mappings from resource : com/ecomm/chat/pojo/ChatMessage.hbm.xml
INFO [org.hibernate.cfg.Configuration] - Reading mappings from resource : com/ecomm/chat/pojo/ChatRemind.hbm.xml
INFO [org.hibernate.cfg.Configuration] - Reading mappings from resource : com/pphome/orgmodel/pojo/OrgInfo.hbm.xml
INFO [org.hibernate.cfg.Configuration] - Reading mappings from resource : com/pphome/orgmodel/pojo/UserInfo.hbm.xml
INFO [org.hibernate.cfg.Configuration] - Configured SessionFactory: null
INFO [org.springframework.orm.hibernate3.LocalSessionFactoryBean] - Building new Hibernate SessionFactory
INFO [org.hibernate.cfg.HbmBinder] - Mapping class: com.ecomm.chat.pojo.ChatUserInfo -> CHAT_USERINFO
INFO [org.hibernate.cfg.HbmBinder] - Mapping class: com.ecomm.chat.pojo.ChatListen -> CHAT_LISTEN
INFO [org.hibernate.cfg.HbmBinder] - Mapping class: com.ecomm.chat.pojo.ChatGroup -> CHAT_GROUP
INFO [org.hibernate.cfg.HbmBinder] - Mapping class: com.ecomm.chat.pojo.ChatMessage -> CHAT_MESSAGE
INFO [org.hibernate.cfg.HbmBinder] - Mapping class: com.ecomm.chat.pojo.ChatRemind -> CHAT_REMIND
INFO [org.hibernate.cfg.HbmBinder] - Mapping class: com.pphome.orgmodel.pojo.OrgInfo -> ORG_INFO
INFO [org.hibernate.cfg.HbmBinder] - Mapping class: com.pphome.orgmodel.pojo.UserInfo -> USER_INFO
INFO [org.hibernate.cfg.HbmBinder] - Mapping collection: com.ecomm.chat.pojo.ChatMessage.chatRemind -> CHAT_REMIND
INFO [org.hibernate.cfg.HbmBinder] - Mapping collection: com.pphome.orgmodel.pojo.OrgInfo.userInfo -> USER_INFO
INFO [org.hibernate.connection.ConnectionProviderFactory] - Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider
INFO [com.mchange.v2.c3p0.PoolBackedDataSource] - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource@11d7dda[ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, description -> null, driverClass -> oracle.jdbc.OracleDriver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 11d7dda, idleConnectionTestPeriod -> -1, initialPoolSize -> 3, jdbcUrl -> jdbc:oracle:thin:@192.168.12.102:1521:orcl, loginTimeout -> 0, maxIdleTime -> 1800, maxPoolSize -> 100, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 5, numHelperThreads -> 3, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 300, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, usesTraditionalReflectiveProxies -> false ]


一直不能启动成功  请问是什么原因?
24 楼 ddrddr4 2012-03-04  
非常感谢,最近在学习
23 楼 xiaoyu19891125 2012-03-02  
[color=violet][/color][size=large][/size][align=right][/align]
引用
[u][/u][i][/i][b][/b]
[img][/img][url][/url][flash=200,200][/flash]
22 楼 lahmygc 2011-12-09  
缺好多东西,编译通不过
21 楼 沈冠军 2011-07-05  
内流满面啊,我找了好久,终于有一个可以参考的了,值得学习一下,呵呵,谢谢
20 楼 lz726 2007-10-17  
不知道这个能不能实现传输文件功能呢? 
19 楼 timerri 2007-09-29  
高连接并发的压力java扛不起~~~
500连接下性能就只剩iis的1/30了。
要做im,还是用c吧

谁做下linux下的java高并发连接测试?
18 楼 travis_tao 2007-09-28  
这个webim做的非常不错,但是查看源码时发现没有package com.ecomm.platcore ,能否提供?谢谢。travis_tao@sina.com
17 楼 galaxystar 2007-09-19  
客户端, 我认为最棒的就是用 flex或最近非常流行的air离线应用. 都是基于flash的, 身本就支持长连接.

并且flash的用户覆盖面非常广.

google talk就是基于flex的.以后有望换成 air.
google analysis已经使用了air

经过大量的播客或yahoo map的实践, 一般服务器也能达到性能极佳, 因此flash做IM是最理想的.
16 楼 luyunjian 2007-09-19  
楼主,我下载了源码,部署后spring也没有报错,但是始终无法跳到action中,你能描述下配置文件中需要注意的地方吗?struts-config.xml中的配置中method方法,spring配置中不再设置manager依靠,是StrutsEntityAction这个类的缘故吗?似乎还是跑不起来啊
15 楼 itstarting 2007-09-14  
试一下先

相关推荐

    基于pushlet web 实时聊天系统

    【基于Pushlet Web实时聊天系统】是一个利用Pushlet框架构建的在线实时通信应用。Pushlet是一种服务器推送(Server-Sent Events)技术,它允许服务器主动将数据推送到客户端,而不是传统的客户端轮询请求数据的方式...

    基于pushlet实现的jsp网站消息推送

    【基于Pushlet实现的JSP网站消息推送】 在Web开发中,实时消息推送技术是提升用户体验的关键要素之一。传统的HTTP协议是一种无状态、请求-响应式的协议,这意味着服务器只有在客户端发起请求时才会进行交互。然而,...

    一个基于pushlet推送的小例子

    总结来说,"一个基于pushlet推送的小例子"是一个展示如何在Tomcat服务器上利用Pushlet框架实现Comet技术的实例。通过这个例子,开发者可以学习到如何构建和部署一个能够进行服务器端数据推送的Web应用,这对于需要...

    web im(web qq) pushlet(里面有说明绝对能用)

    web im 类似 web qq 实现的聊天 ,里面实现了好有上下线提示 信息发送 (如有分组 留言 群聊 查看留言 都已经实现 在这里需要使用到数据库),这些功能本人直接加入项目中了, 由于这里没很多时间去整理 所以整理了...

    pushlet实现简单的用户聊天

    "pushlet实现简单的用户聊天"是一个典型的用例,它展示了如何利用Pushlet框架来构建一个在线聊天系统。Pushlet框架主要包括两个核心组件:Pushlet Server和Pushlet Client。Pushlet Server运行在服务器端,接收并...

    基于Pushlet推技术的网络应用程序开发的研究

    Pushlet的基本工作原理是,客户端的网页包含一个控制层框架和一个表现层框架,控制层通过HTTP连接与Pushlet服务器保持联系,接收JavaScript代码和数据,然后利用JavaScript更新表现层的内容,实现页面的局部更新。...

    基于pushlet_chat技术的群聊实现 解决了中文乱码问题

    综上所述,这个项目提供了一个完整的基于Pushlet_Chat技术的群聊实现,特别关注了中文字符的正确处理,对于需要构建类似系统的开发者来说,具有很高的参考价值。通过深入研究和实践,可以更好地理解和掌握即时通信...

    使用Ext Pushlet 实现的点对点聊天功能

    实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='...

    pushlet实现服务器端向客户端推送消息总结

    然而,需要注意的是,Pushlet 是一个较老的技术,现代Web开发中更多地采用WebSocket或其他现代推送技术,如Server-Sent Events (SSE) 或基于HTTP/2的Push。这些技术提供了更好的性能和兼容性,更适合当前的Web环境。

    pushlet 和comet 资料介绍

    Pushlet是一种基于Java的开源实现,它支持现有的Web服务器。Pushlet的核心思想是通过持久化的HTTP连接来实现实时通信。在客户端,Pushlet通常使用IFrame和JavaScript来创建一个持久的连接,使得服务器能够向浏览器...

    基于pushlet做的comet

    基于pushlet实现的comet技术的服务器推技术。新增了接口和实现类,可直接调用点对点,群发等功能。注意Session类当中create方法中王hashtable当中存入当前登录用户id和sessionid键值对。启动后会发现的。

    pushlet.jar 和示例工程

    "pushlet.jar 和示例工程"是一个专注于实现服务器端向客户端主动推送消息的框架,它在Web开发领域中扮演着重要角色。Pushlet框架的设计旨在克服传统的HTTP协议中客户端请求、服务器响应的被动通信模式,转而采用一种...

    pushlet的JAR包和文档

    5. **bsIM.war**:这是一个WAR文件,通常包含了一个Java Web应用程序的全部部署内容,可能是一个使用Pushlet实现的即时通讯(IM)应用示例,可以直接在支持Java的Web服务器上部署运行。 6. **pushlet_文档.doc**:...

    使用Ext Pushlet 实现的点对点聊天功能最新

    实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='...

    通过推送机制(Tomcat comet,pushlet)实现进度条

    Pushlet是另一种在Tomcat中实现Comet效果的方法,它是由Apache Cocoon项目开发的一个小型框架。Pushlet框架提供了一种简单的方式,让服务器可以持续发送数据到客户端,同时客户端可以通过订阅(subscribe)和取消...

    bsIM.war 基于pushlet WebQq

    bsIM.war,基于pushlet WebQq

    服务器推送pushlet讲解

    Pushlet框架是Comet技术的一个具体实现,由Jaekson和Grizzly项目开发。它是一个轻量级的、可扩展的框架,支持多种推送模式,如长轮询、HTTP流和HTTP片段。Pushlet的核心概念包括Pushlet服务器、Pushlet客户端和...

    pushlet

    "Pushlet"是一种基于HTTP长连接的推送技术,主要用于实现实时数据的传输,尤其是在Web应用中。在传统的HTTP协议中,服务器与客户端的交互是基于请求-响应模型的,客户端需要不断发起请求来获取更新的数据,这在需要...

    pushlet 之 Pushlet使用手把手实例

    2. 创建客户端:客户端通常是一个Web应用,使用JavaScript或者Java Applet来实现与Pushlet服务器的交互。你需要编写代码创建一个持久的HTTP连接,并注册订阅感兴趣的事件。 3. 编写服务器端逻辑:在服务器端,你...

    PushLet实例,可直接运行

    PushLet是一种基于Java的实时推送技术,用于在...总的来说,这个PushLet实例是一个宝贵的教育资源,它提供了从理论到实践的桥梁,让开发者能够在实际操作中理解并掌握PushLet的使用,从而提升其在实时Web开发中的技能。

Global site tag (gtag.js) - Google Analytics