一个基于Java和Ajax的聊天室。主要想和大家分享一下自己设想的开发机制并向大家求经。

先说一下这个聊天室得功能:

    1、聊天室可以实现如聊天对话,表情发送,字体变色,昵称发言,查看聊天记录等正常聊天室得功能。

    2、这个聊天室可以实现类似分房间似得聊天,也就是说您如果进入得是A房间,那么您只能看到A房间用户发送得信息,如果您登陆得是B房间,那您只能看到B房间得信息。

    3、该聊天室提供了用户登陆数统计。

    4、基于本聊天室得开发机制,还可以实现如私人对话等的功能,扩展性还是比较强的 :)。

再说一下开发机制吧:(开发思路)

    对于基于web层的聊天室已经不是新鲜事了,但是用Java开发的还是比较少。原因可能是没有一套好的实现机制,我现在就分享一下个人开发心得,也算是抛砖引玉了,大家可以去粗取精,优化一下,希望早日能让web聊天代替老式的客户端聊天。:),不说废话了,进入正题。首先需要明确的是基于ajax的web层聊天室一定是需要用户端(浏览器端)的代码内有一个计时器,定期从server端取数据,然后反馈给客户端进行查看。这时本人处理的方式是在一个server端持久变量里面存入一个当前最大对话数--"消息索引号",该索引号用于记录当前最大的索引号数。当server端接收到用户发送的1条消息的时候,这个索引号就会自增1。然后该消息和这个索引号一起绑定到一个类似HashMap的变量中,索引号是key消息就是value,这样可以形成一个类似队列的组合。当每个浏览器用户登陆以后从该索引号中取得当前最大的索引号作为自己的初始索引号,然后再发送获取消息的命令的时候连带着这个索引号一同发送到server端,server端根据用户发送的索引号再保存全部对话的持久变量(application)中取出索引号大于用户当前索引号的全部聊天信息作为反馈内容,这样可以大量减少数据反回量。然后再把用户取得消息的最大索引返回给浏览器端,让用户保存起来作为下次消息接收的当前索引号。依次反复。

    以上这些就可以实现基础的聊天室功能,发送消息,取得消息,然后基于hashmap的特殊特性可以完成分房间记录对话,如果套入session的机制的话,可以实现私有聊天,(sessionid和消息绑定,传递给特定的session接收)。并且建立定时清空app的机制,把消息记录写入xml文件,然后再浏览器端解析xml文件,可以达到查看历史记录的目的。个人认为拓展性还是比较强的。:)