MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » B/S 模式下实现即时消息通讯~解决思路

B/S 模式下实现即时消息通讯~解决思路

www.MyException.Cn  网友分享于:2015-08-26  浏览:439次
B/S 模式下实现即时消息通讯~~~~

  近端时间一直在研究使用 Java 来实现即时通讯, 意思就是说如果有一个用户给另一个用户发送消息,这个用户可以及时收到这个消息,并在页面上弹出一个对话框什么

  的。 但是没有一个很好的实现方法, 有人说 C/S 模式下可以使用 socket 来实现,我想在 B/S 模式下实现这样的功能。 我想不能用 http 实现, 因为 http 是无

  状态的连接, 是否可以使用 TCP 长连接来实现呢? 谁可以提供一下思路或者代码。 


  定时刷新页面,去检索数据库中的数据,这样消耗的资源挺大的, 我想有没有其他的方法来实现呢,欢迎各位高人、牛人一起来讨论下, 我想这也是大多人的疑惑吧!!

------解决方案--------------------
发送消息->服务器内存->接收消息,定时刷新,取服务器内存中的消息.接收后,所接收的消息保存入服务器数据库,状态为已经读
*
|
一个线程在监视服务器内存消息,如果超过规定时间没有接收的,从内存中删除,存入数据库,状态为未读

第一次接收消息时,检查数据库中是否有未读消息,也可以把已读和未读两种消息分开两个表来存放。

这样,用http实现,每都都出新,符合B/S,结合ajax非常好用;定时刷新,检查的是服务器内存,压力不是很大。内存区可以定义缓冲区大小,排队接收,这样就可以了。
注:B/S就是浏览器模式,不存在TCP 长连接,所以用TCP长连接实现是不现实的。

另一种方案就是网页插件+socket或用applet+socket,或用flash+socket,但要纯B/S实现就要ajax+http+定时刷新这种非实时的消息传递,只不过不存在你所说的服务器压力问题。
写了一大套,拿分来。
------解决方案--------------------
DWR的服务器推进功能可以考虑,而且页面无刷新
服务器内数据更改,服务器自动将其推到客户端显示,客户端页面无刷新
------解决方案--------------------
如果你想在BS结构,且不用ajax来刷新做即时通讯。你先思考几个问题:
1、客户端是浏览器,如果客户端没有连接或者打开你的聊天界面,那么,你写的聊天是否能自动让它运行呢?我想是不行的吧。
2、大家都知道浏览的异常关闭问题。

3、你所说的TCP在连接一段时间,如果没有响应,会自动关闭连接的,确宝资源不浪费。不过你所说的TCP怎么来实现通讯,偶也不懂,只知道其连接的协议。

个人认为你所要实现的那种理想效果很难实现,不知道其他高手有超人的思维?

------解决方案--------------------
我也一直被B/s即时通讯的问题困扰着,帮lz顶顶吧!
------解决方案--------------------
探讨

感谢你的回复, 首先我要说下, 我说了不要页面刷新那种, 要是那种,早就做出来了, 何必要拿来问人呢! 在说有的 OA ,还有这个 CSDN 上的都是可以实现这样的功能的, 不用刷新, 就可以监测到消息。


------解决方案--------------------
DWR,你可以去下个DWR包来看看,
http://download.csdn.net/source/1121915
DWR用来做即时通讯很方便
这里很方便的,不要去想用socket或者定时刷新了!这不太现实.
------解决方案--------------------
DWR的推送不需要每一个页面都向后面发送请求,而是后台接收到某个页面的请求再将反馈信息发送给其它的页面!
------解决方案--------------------
探讨
引用:


  感谢你的回复, 首先我要说下, 我说了不要页面刷新那种, 要是那种,早就做出来了, 何必要拿来问人呢! 在说有的 OA ,还有这个 CSDN 上的都是可以实现这样的功能的, 不用刷新, 就可以监测到消息。



实际上,没有真正的不刷新技术,只是现在的刷新都用AJAX来做,用户感觉不到罢了。
其实还是定期向后台发出请求。

------解决方案--------------------
探讨

只能这样吗?

------解决方案--------------------
没做过java
up
------解决方案--------------------
.
------解决方案--------------------
Ajax把页面和后台链接起来,页面不刷新也可以定期跳出对话框!
底层建立socket的长连接,并服务器端监控心跳,没有心跳的话就重新建立一个链接,其实大部分的性能消耗在建立连接上,这样做就不会消耗太多的性能了
------解决方案--------------------
1用applet
2基本原理仍是定时刷新 不管外壳怎么变
3可以研究下服务器推技术

不刷新的想法是好的 但那就像不拨号就能打的手机一样 至少目前还没有
------解决方案--------------------
用 Flash + XmlSocket 可以做到
------解决方案--------------------
不想刷新就只能用 AJAX了,实时通讯一半在网页中就这样了!
(例)就好像SINA的NBA上记分牌一样!
------解决方案--------------------
没实现过,但是这篇文章讲的很不错
http://www.ibm.com/developerworks/cn/java/j-jettydwr/
------解决方案--------------------
学习了!
------解决方案--------------------

文章评论

科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
如何成为一名黑客
如何成为一名黑客
那些争议最大的编程观点
那些争议最大的编程观点
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
一个程序员的时间管理
一个程序员的时间管理
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员和编码员之间的区别
程序员和编码员之间的区别
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
旅行,写作,编程
旅行,写作,编程
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
10个调试和排错的小建议
10个调试和排错的小建议
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
鲜为人知的编程真相
鲜为人知的编程真相
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员的鄙视链
程序员的鄙视链
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
Java程序员必看电影
Java程序员必看电影
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
中美印日四国程序员比较
中美印日四国程序员比较
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
编程语言是女人
编程语言是女人
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员必看的十大电影
程序员必看的十大电影
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
我的丈夫是个程序员
我的丈夫是个程序员
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
 程序员的样子
程序员的样子
程序员都该阅读的书
程序员都该阅读的书
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
老程序员的下场
老程序员的下场
我是如何打败拖延症的
我是如何打败拖延症的
每天工作4小时的程序员
每天工作4小时的程序员
代码女神横空出世
代码女神横空出世
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有