论坛首页 Java企业应用论坛

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

浏览 21552 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-31  
此文章有一定难度,主要面向对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
   发表时间:2007-08-03  
之前也写过一篇文章,不过那个是详细设计和需求分析,如果不知道需求可以参照:http://pijunliang.iteye.com/blog/89158
(这里是IM的一些需求分析)
0 请登录后投票
   发表时间:2007-08-20  
老大,你的code里面缺东西啊,import com.ecomm.platcore.struts.StrutsAction;找不到,帮忙解决啊,xufangliang@hotmail.com
0 请登录后投票
   发表时间:2007-08-20  
另外最好给个sql创建文件,不然我搞不清你的数据库结构啊老大,谢谢,以后想跟你共同研究,希望能有这样的合作机会
0 请登录后投票
   发表时间:2007-08-20  
这里不需要SQL创建文件,因为这里有个HIBERNATE的ORM映射文件,hbm.xml.这里阐述了数据库结构的所有关系。因为它会在我们没有表结构的时候,能自动帮助建。同样也很希望能和你一起研究,
0 请登录后投票
   发表时间:2007-08-20  
能不能管理组织机构,能不能传送文件
0 请登录后投票
   发表时间:2007-08-20  
不能传送文件,不提供管理组织机构 ,只是个DEMO,提供及时收发消息特点就是:仿照QQ和MSN的实现,不同于QQ和MSN区别是采用C/S 结构的实现方式,现在利用 B/S 结构实现一套轻量级的  IM聊天工具并协同应用系统工作,给应用系统提供接口,点对点收发消息(包括对脱机用户留言)、一对多收发消息、群聊功能、即时显示在线用户和脱机用户,可以拓展短信接口!支持多个数据库,集成任何应用系统。核心的聊天部分采用 Pushlet 2.0 推送的方式实现 即时。服务器端主动往客户端推送消息的时间 是 小于500豪秒,用户根本体验不到这个速度,主要采用AJAX 的方式。
0 请登录后投票
   发表时间:2007-08-21  
请问性能如何,同时在线多少人,服务器压力如何
0 请登录后投票
   发表时间:2007-08-21  
今天用了下,tomcat下,发现群组名称和个性签名中文乱码,请问能解决吗,还有是不是只能jdk1.5阿,pushlet能推消息,能不能推文件阿
0 请登录后投票
   发表时间:2007-08-22  
用PUSHLET这用长链接机制会不会在实际应用给服务器带来很带的压力???
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics