`
dilaomimi
  • 浏览: 11728 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

服务器推送技术

阅读更多

我是一名新入行的JAVA程序员,刚进公司就遇到一个BS架构的系统有客户端数据即时更新需求的问题,前面有想过用Ajax定时刷新局部数据的方法,这样并发用户多的话就造成系统开销过大,后来在网上查出采用以下方案可以解决此问题,但还未曾测试保持socket连接当并发用户多起来的时候会怎样,这里与大家分享一下,如果有好的方案希望们不要吝啬,多多指教,在此谢过!

结合JavaScript帧间通信和一个管理网络通信的Java Applet,用推送技术解决这个问题。
Java Applet的任务是通过socket连接服务器并监听内容更新。一旦接收到了新的内容,Applet调用一个JavaScript函数并把包含新内容的HTML传递给JavaScript函数。JavaScript函数运用DHTML和DOM技术,把页面中一个<div>标记的内容用参数中传入的新内容替换。 

在服务器端,创建另一个类的实例响应Socket连接请求,并为每一个新的连接请求创建一个新的线程。每一个线程只检查数据文件是否改变。如果数据文件已经改变,则线程读取文件内容,并把新的数据发送给已经连接的Applet(示例应用把整个文件发送给Applet)。

在客户端,一个隐藏帧包含了上面提到的Applet。Applet实现了连接服务器的功能,并实现了一个简单的通信协议。建立与服务器的连接之后,Applet接收来自服务器的数据,并调用JavaScript函数把数据传入文档。


这样就实现了服务器端推送数据的功能,一有客户上来访问页面就为他建立与服务器的socket连接,服务器端得到改变的数据以后通过这个连接传回客户端。

分享到:
评论
10 楼 zhangd83 2007-09-19  
引用
dilaomimi     2007-04-10 08:26
楼上大哥,我找到一个例子,正在研究,叫PUSHLETS,代码你要的话可以发给你哦留个邮箱给我就行了


楼上叫dilaomimi 的兄弟,我也很需要这个例子,能给我发一份吗?
我的邮箱是Leon_Zhang@email.LingAn.com.cn
9 楼 hred 2007-04-11  
http://dev.dschini.org/socketjs/

这个地方有一个用flash连接 socket,然后用js拿数据的东西,跟java applet功能估计差不多。

楼主也可一试。
8 楼 dilaomimi 2007-04-10  
楼上大哥,我找到一个例子,正在研究,叫PUSHLETS,代码你要的话可以发给你哦留个邮箱给我就行了
7 楼 歆渊 2007-04-10  
dilaomimi 写道
首先非常感谢你的建议,我也上了你留给我的那个网站,可是都是全英文的,小弟我才疏学浅看不懂,如果您所说的线程池以及服务器端SOCKET用其他的技术来做的话,我一时半会怕很难上手,因为项目也比较急,请问大哥有没有这种案例的代码,能否发给我一份,小弟在此谢过了!


这个恐怕也很难有合适的参考例子, http://wow.dev.java.net 可以下载WoW的源码, 是我做的; 不过如果还没有这方面的经验, 门槛也还是比较高的, 而且也都是英文的. WoW还算不上完全的ServerPush, 是间歇轮询的方式, 所以客户端更新有时会有一定的延迟.

我能想到的最简单的例子还是Jetty里面带的, 建议下载了研究研究.
6 楼 dilaomimi 2007-04-09  
to blackj:
有没有别人已经做好的例子供参考啊?
5 楼 blackj 2007-04-09  
用pushlets可以实现服务器端推数据,可以在页面中嵌入一个pushlet iframe, 接受服务端推送过来的javascript代码,来实现页面的更新。它本身有一个session管理,可以实现单播及广播。可以上它的官方网站上看看Demo。
4 楼 dilaomimi 2007-04-09  
首先非常感谢你的建议,我也上了你留给我的那个网站,可是都是全英文的,小弟我才疏学浅看不懂,如果您所说的线程池以及服务器端SOCKET用其他的技术来做的话,我一时半会怕很难上手,因为项目也比较急,请问大哥有没有这种案例的代码,能否发给我一份,小弟在此谢过了!
3 楼 歆渊 2007-04-09  
你的方案有几个明显的问题:

1. 通过Applet透过非HTTP通道通信, 对防火墙和代理服务器不友好, 有可能连不通.
2. 服务器端响应Applet链接的做法最好不要自己实现, 如果真要这么做, 最好还是基于成熟的解决方案, 开源的像 http://www.quickserver.org/ 看起来不错的.
3. 如果真要自己做Socket服务器, 也真的不能来一个请求开一个线程, 对服务器压力过大. 这种一般都是做线程池. 而且连接最好通过NIO, 比BIO的并发支持能力强得不是一点半点.


这个需求我的感觉比较合适的还是cometd, 虽然还不是那么成熟标准的协议, 但在这个方向上是很有潜力的一个候选. 不过我也还没有去用过, 只是大概了解.

AJAX ServerPush基本原理大概都是基于HTTP, 有一个连接不断的去轮询服务器, 但服务器端并不是立即返回, 而是等待一定的时间 (这个时间一般是30秒, 要保证不超过两边配置的TCP连接超时间隔, 不然就被超时中断了), 如果服务器端没有新事件和数据, 就等这么长时间再返回; 而等待过程中如果有新的消息要发给客户端, 就立即将新数据返回给客户端. 这样就实现了有新事件的时候客户端可以立刻获得通知的效果.

但是由于浏览器一般限制到同一服务器的http连接最多两个, 所以不可能在一个网站上给客户端跑超过一个这样的轮询连接, 否则其他资源就没法下载了. 所以就需要COMETD这样的协议框架, 去占用一个轮询连接, 实现多个页面或组件的消息多路分发.

另外因为服务器端响应这种轮询连接的时候必须等待, 传统的J2EE架构, 每request一线程单次处理写回response的模式就非常不适, 因为很快就会导致线程池爆满, 却多数都是空闲占用. 不要低估操作系统调度线程的性能开销, 其实 nio 对比 多线程bio 的性能提高, 源头基本就在这里.

Jetty6内核重新用nio写过了, tomcat6听说也已经上nio了. 不过Server Push相关的支持一时肯定不会出现在JavaEE规范里, 所以还只能仰赖于他们各自的专有接口. Jetty6已经支持cometd, 同时还有自己的ajax解决方案, 可以去多研究研究它的适用性.
2 楼 dilaomimi 2007-04-09  
楼上的大哥能不能说的详细一点,或者告诉小弟从哪里能找到这种类似的例子,非常感谢
1 楼 dengyin2000 2007-04-09  
google pushlet

相关推荐

    服务器推送示例 - IE/火狐/谷歌 长链防断实用版

    服务器推送技术是网络应用中的一种优化策略,它允许服务器主动将数据发送到客户端,而不仅仅是响应客户端的请求。这种技术可以显著减少延迟,提高实时性,尤其适用于实时更新的应用,如股票报价、在线聊天或者游戏...

    服服务器推送技术服服务器推送技术.doc

    总之,服务器推送技术是Web技术的重要组成部分,它通过各种手段实现了服务器主动向客户端发送数据的能力,增强了Web应用的交互性和实时性,推动了Web向更接近桌面应用体验的方向发展。随着技术的进步,未来的服务器...

    DWR服务器推送技术(实时)

    DWR的核心特性是它支持AJAX(Asynchronous JavaScript and XML)以及服务器推送技术,极大地提高了Web应用的用户体验。 **服务器推送技术**: 传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器响应...

    基于服务器推送技术建立在线交流平台的探讨与实现

    ### 基于服务器推送技术建立在线交流平台的探讨与实现 #### 引言与背景 随着互联网技术的迅速发展,人们的沟通方式发生了显著变化,越来越多的交互活动转移到了线上。传统的B/S(浏览器/服务器)模式下,信息传递...

    DWR 简单额服务器推送技术DEMO

    在这个“DWR简单服务器推送技术DEMO”中,我们将探讨如何利用DWR来实现在服务器端向特定客户端页面推送数据,即使这些页面并未主动发起请求。 服务器推送技术是相对于传统的客户端请求、服务器响应模式而言的。在...

    Comet服务器推送技术

    Comet服务器推送技术是一种在Web应用中实现服务器主动向客户端推送数据的技术,它解决了传统HTTP协议下只能由客户端发起请求的局限。随着Ajax技术的普及,开发者希望在浏览器环境中实现更接近桌面应用的实时交互,而...

    pushlet服务器推送技术

    ### Pushlet 服务器推送技术详解 #### 一、引言 在IBM于2008年发布的技术报告中,详细介绍了服务器推送技术——即所谓的Pushlet。这项技术为Web应用程序的发展带来了革命性的变化,尤其是在异步通信方面。本文将...

    DWR服务器推送技术实现WebQQ

    **DWR(Direct Web Remoting)服务器推送技术详解与WebQQ实现** DWR,全称为Direct Web Remoting,是一种在JavaScript和Java之间进行远程方法调用(Remote Method Invocation,RMI)的技术,允许Web应用程序实现...

    服务器推送技术经典案例

    服务器推送技术是现代Web开发中的一个重要概念,它允许服务器主动将数据发送到客户端,而无需客户端发起新的请求。这一技术打破了传统的HTTP请求-响应模型,极大地提升了实时性和交互性,尤其适用于实时聊天、股票...

    服务器推送技术资料 server push

    在实际应用中,服务器推送技术广泛应用于金融市场的实时报价、社交媒体的通知提醒、在线游戏的实时同步以及物联网设备的数据推送等场景。随着技术的进步,服务器推送将更加成熟,为Web应用程序带来更加丰富的实时...

    利用服务器推送技术实现站内短消息(java)

    利用服务器推送技术实现站内短消息(java) 让client与service建立一个长连接,不用client手动request,service会自动response,当有好友在线的时候,会自动把好友的信息加载到select里,点击好友发送短消息时,会在...

    开发技术-硬件-服务器推送技术在光缆实时监控系统中的研究应用.zip

    在IT行业中,硬件和软件的结合常常带来创新的解决方案,特别是在服务器推送技术的应用上。本文将探讨“服务器推送技术在光缆实时监控系统中的研究应用”这一主题,它揭示了如何利用先进的技术来提升网络基础设施的...

Global site tag (gtag.js) - Google Analytics