近端时间一直在研究使用 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顶顶吧!
------解决方案--------------------
------解决方案--------------------
DWR,你可以去下个DWR包来看看,
http://download.csdn.net/source/1121915
DWR用来做即时通讯很方便
这里很方便的,不要去想用socket或者定时刷新了!这不太现实.
------解决方案--------------------
DWR的推送不需要每一个页面都向后面发送请求,而是后台接收到某个页面的请求再将反馈信息发送给其它的页面!
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
没做过java
up
------解决方案--------------------
.
------解决方案--------------------
Ajax把页面和后台链接起来,页面不刷新也可以定期跳出对话框!
底层建立socket的长连接,并服务器端监控心跳,没有心跳的话就重新建立一个链接,其实大部分的性能消耗在建立连接上,这样做就不会消耗太多的性能了
------解决方案--------------------
1用applet
2基本原理仍是定时刷新 不管外壳怎么变
3可以研究下服务器推技术
不刷新的想法是好的 但那就像不拨号就能打的手机一样 至少目前还没有
------解决方案--------------------
用 Flash + XmlSocket 可以做到
------解决方案--------------------
不想刷新就只能用 AJAX了,实时通讯一半在网页中就这样了!
(例)就好像SINA的NBA上记分牌一样!
------解决方案--------------------
没实现过,但是这篇文章讲的很不错
http://www.ibm.com/developerworks/cn/java/j-jettydwr/
------解决方案--------------------
学习了!
------解决方案--------------------