首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2012-01-18 
B/S 模式下实现即时消息通讯~~~~近端时间一直在研究使用 Java 来实现即时通讯, 意思就是说如果有一个用户

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/
[解决办法]
学习了!
------解决方案--------------------


这些问题我以前也相当困扰,看了上面的讨论,决定这是个好不容易做到就是。
[解决办法]
Ajax 也是刷新,不过是局部刷新罢了,不会跳出B/S的模式。
[解决办法]
学习
[解决办法]
友情帮顶。
[解决办法]
学习了
[解决办法]
XmlSocket
[解决办法]
学习
[解决办法]
貌似没办法不刷页面就能得到消息的吧
[解决办法]
学习中.....
[解决办法]
可以用DWR的反向AJAX技术来实现。LZ可以去DWR官方网下载示例源码,里面有个聊天室源码,只要稍微改进一下即可!
[解决办法]
学习收藏

[解决办法]
个人认为B/S是浏览与服务模式,你第一次打开网页就从服务器请求下载网页,对方发送的消息,就是将表单提交到服务器处理。
要实现实时通讯不使用请求服务器不现实,不管是手动刷新、还是定时刷新或是通过Ajax 通过异步刷新,都要请求服务器。不可
能做到像C/S那样的通过socket 实时通信。在C/S当中,发送端也接送端都是服务端。在B/S中,是以请求服务器,发送与接送
都要经过服务器处理。接收端必须再次请求服务器才能看到新发的数据(不管有什么方式刷新)。除非你重写浏览器让浏器帮你完成。或是写是一个ActiveX控件在客户端。如果这样也就跳出B/S范畴。
[解决办法]
如果不刷新,你只能b/s和c/s结合,用applet(自己没试过)听朋友说可以,用falsh应该也可以。自己做过刷新的!
[解决办法]
朋友,1楼的说的很全了,不要在问人了。 
按1楼说的找点代码来做实验,很快你就会得到你想要的。
我总结下:flash+socket(推荐哦,网页游戏多用这个)
网页插件+socket(注意刷新次数哦,很容易刷死服务器)
applet+socket(这个没研究)
ISAPI+socket (网上搜索ISAPI可得到技术资料)

[解决办法]
mark 关注一下
[解决办法]
学习
[解决办法]
支持 啊
[解决办法]
学习了 ,
[解决办法]
这个问题不需要在讨论了吧

就bs模式来说:
大部分简单可靠易行的就是ajax轮询。具体处理自己结合业务斟酌了

还有新的技术就是服务推送技术,实现很复杂,对服务器要求也高,你真的有功夫的就去研究吧,
[解决办法]
请问,用JAVA来实现通讯的原理是什么啊???????我也是学JAVA的,不过才大一,刚接触到一点皮毛的东西,你们楼上的谈的东西好似深奥哦!!不过我相信我还是能做个像样点的什么出来的,只是时间....哎.自卑!谁教哈我,行不??
[解决办法]
up
[解决办法]
学习
[解决办法]
可不可用输入框内有内容就触发更新啊!
[解决办法]
1 comet 这个东西其实就是长连接,我以前用php和jsp都实验成功过,很好用。
2 用flash, 这个插件最好弄,因为绝大部分浏览器上都安装了
3 其它的插件,比如activeX, sliverlight等等


[解决办法]
虽然没做过Java,但是这个原理还是相通的!进来学习!!
[解决办法]
up!
[解决办法]
B/s不刷新.Ajax
[解决办法]
路过,学习
------解决方案--------------------


mark
[解决办法]
学习!!
[解决办法]
学习!!
[解决办法]
HTTP也可以长连接的
[解决办法]
Java实时通信其实就是在客户端不停的WHILE 接受信息 一但接受到信息就显示给用户


BS模式下实现即时消息通讯重点只是如何通知视图去获得新的信息 推技术是可以实现马上获得信息的效果 但是偶不喜欢....

或者就是在页面套APPLET小程序 这是最完美的

前段时间用AJAX做个小的聊天 在页面用JS定时去后台取数据(每3秒) 看起来效果还8错 而且速度也8错
[解决办法]
Flex(Flash) Socket
[解决办法]
MFC ACtiveX
[解决办法]
UP
[解决办法]

探讨
楼上的每个回复我都仔细阅读了...


[解决办法]
用AJAX不错的啊
[解决办法]
那我就不知道了,学习了
[解决办法]
mark
[解决办法]
本质上来讲,不管是什么通信协议,端口都是中断轮询机制,不用这么钻牛角尖。
基于HTTP或SOAP协议的纯B/S模式只能考虑反复刷新(局部)页面,向服务器请求数据更新。

实现这种类型的IM,重点考虑服务器端消息队列、消息缓存和消息持久化的优化问题。
现在市面上已经有不少基于Web Services的IM商用软件。目前还不知道这种软件在压力测试
下的表现如何。

如果有类似的需求,可以考虑一下 Ajax + REST + MQ
[解决办法]
使用AJAX+servlet/struts/struts2+hibernate/ibatis来做.

[解决办法]
学习学习
[解决办法]
已经有现成的了,jabber+jwchat,你可以看一下,我在公司的时候用在了webgame中,
[解决办法]
已经有现成的了,jabber+jwchat,你可以看一下,我在公司的时候用在了webgame中,
[解决办法]
已经有现成的了,jabber+jwchat,你可以看一下,我在公司的时候用在了webgame中,
[解决办法]
好像不能不刷新吧?谁能解释下?
[解决办法]
收藏以留后用
[解决办法]
顶一下!
[解决办法]
用 applet ,线程,监听
[解决办法]
学习……

热点排行