`
dreaminjava
  • 浏览: 35676 次
  • 性别: Icon_minigender_1
  • 来自: 武汉→北京→武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

如何做一个最完美的实时数据传输程序

阅读更多
               如何做一个最完美的实时数据传输程序  

   年底公司没什么事,看到同事们都在刷各个不同的二手火车票网站,因为要得到最新信息要不停的F5,所以我想做一个实时更新最新数据的web程序,反正也没什么事情做。
    我的思路是:利用ajax每秒访问数据库一次,如果有最新的数据就返回最新数据,完成小demo,功能也实现了,但是同事觉得我的思路不好,因为不停的访问数据库会影响效率,公司是做税务的,效率总是放在第一位的。
     同事也提供了一个思路,利用ajax每秒访问后台但是不允许数据库,利用oracle的触发器,如果有新数据插入就允许访问相关数据库数据。
     不知道能否用触发器控制一段java代码,这个暂且不说,就算可以实现效率会提高多少?
     不知道大家是否有什么看法和新的思路,怎么样才能做一个最完美的实时数据传输程序。






ps:大家新年快乐,希望那些没买到票的都能买到票,能够顺利的回家过年。
分享到:
评论
7 楼 hax 2008-03-03  
如果你只是担心数据库的压力,而不在乎web服务器的压力(通常确实如此),那没有必要用其他技术,只需要在web服务器上合理的做缓存就可以了,比如你的web服务器程序保持cache是5秒,只有超过5秒才会重新访问一次数据库。
6 楼 mickeyccq 2008-03-03  
利用二楼的技术应该可以了。DWR2.0就是用的Comet技术进行事件触发推送消息 的。
5 楼 mickeyccq 2008-03-03  
利用二楼的技术应该可以了。DWR2.0就是用的Comet技术进行事件触发推送消息 的。
4 楼 Sing 2008-02-15  
你试http长连接Comet服务器推技术,这个是不断地建立30秒长的连接,相当于跟服务器建立了socket连接,是属于实时数据提取的.
http://www.examda.com/Java/zhuangye/20070908/113416646.html
3 楼 rasonyang 2008-02-15  
JavaScript可以通过Extjs实现OBserver模式
然后,就是通过Applet或者DWR Reverse ajax,
让Server fire json Event让javascript onEvent
2 楼 一杯白开水 2008-02-07  
ls一下子就一片代码, 像我这样没用过ajax的人看得累啊.
能不能把你的实现原理描述一下?
1 楼 rasonyang 2008-02-02  
<p>我的实现思路如下:</p><p> 实现通过DWR Reverse Ajax调用EXTJS的Observable Class(Java CODE)</p><p>Collection&lt;ScriptSession&gt; sessions = serverContext.getScriptSessionsByPage(pageUrl);<br/>        logger.debug("the page:{} url's session size is {}", pageUrl,sessions.size());<br/>        ScriptBuffer script = new ScriptBuffer();<br/>        script.appendScript("cti.fireVoiceEvent(")<br/>          .appendData(event)<br/>          .appendScript(");");<br/>        logger.debug("the script is {}", script);<br/>        for(ScriptSession session:sessions){<br/>            logger.warn("session id is {}", session.getId());<br/>            session.addScript(script);<br/>        } </p><p>cti.js如下:</p><p>Ext.namespace('cti');<br/>cti.Voice = function(){<br/>        this.addEvents({<br/>        "dialing" : true,<br/>        "ringing" : true,<br/>        "established" : true,<br/>        "released" : true<br/>    });<br/>    <br/>    <br/>        <br/>};<br/>Ext.extend(cti.Voice, Ext.util.Observable);<br/>cti.VoiceCallBack = new cti.Voice(); <br/>cti.fireVoiceEvent = function(event){<br/>    var runFireEvent = cti.VoiceCallBack.fireEvent.bind(cti.VoiceCallBack);<br/>    runFireEvent(event.name,event);<br/>} </p><p> </p><p>然后在Voice.js处理,各种Event事件如下:</p><p>Ext.onReady(function(){<br/>    <br/>    <br/>    <br/>    var targetDN = Ext.get('targetDN');<br/>    var thisDN = Ext.get('thisDN');<br/>    var connId = Ext.get('connId');<br/>    <br/>    //make call<br/>    var makeCallButton = Ext.get('makeCallButton');<br/>    var onMakeCall = function() {<br/>        cti_voiceService.makeCall(thisDN.getValue(),targetDN.getValue());<br/>    };<br/>    <br/>    makeCallButton.on('click',onMakeCall);<br/>    <br/>    //answer call<br/>    var answerButton = Ext.get('answerButton');<br/>    var onAnswer = function() {<br/>        cti_voiceService.answer(thisDN.getValue(),connId.getValue());<br/>    };<br/>    <br/>    answerButton.on('click',onAnswer);<br/>    <br/>    //release call<br/>    var releaseButton = Ext.get('releaseButton');<br/>    var onRelease = function() {<br/>        cti_voiceService.release(thisDN.getValue(),connId.getValue());<br/>    };<br/>    <br/>    releaseButton.on('click',onRelease);<br/>    <br/>    //logout<br/>    var logoutButton = Ext.get('logoutButton');<br/>    var onLogout = function() {<br/>        cti_voiceService.release(thisDN.getValue(),connId.getValue());<br/>        cti_voiceService.logout(thisDN.getValue());<br/>    };<br/>    <br/>    logoutButton.on('click',onLogout);<br/>    <br/>    Ext.EventManager.on(window, 'unload', function() {<br/>       cti_voiceService.release(thisDN.getValue(),connId.getValue());<br/>        cti_voiceService.logout(thisDN.getValue());<br/>    });  <br/><br/>    <br/>    //onRinging Event Handler</p><p> var onRinging = function(ev){</p><p>     cti.onStateChange(ev); </p><p>     document.voice.connId.value = ev.connID;<br/>        document.voice.thisDN.value = ev.thisDN;<br/>        document.voice.answerButton.disabled = false;<br/>        document.voice.releaseButton.disabled = true;<br/>    };<br/>    <br/>    cti.VoiceCallBack.on('ringing',onRinging);<br/>    </p><p> //onDialing  Event Handler<br/>    var onDialing = function(ev){<br/>        cti.onStateChange(ev);<br/>        document.voice.connId.value = ev.connID;<br/>        document.voice.answerButton.disabled = true;<br/>        document.voice.releaseButton.disabled = true;<br/>    };<br/>    <br/>    cti.VoiceCallBack.on('dialing',onDialing);<br/>    <br/>    var onEstablished = function(ev){<br/>        cti.onStateChange(ev);<br/>        document.voice.connId.value = ev.connID;<br/>        document.voice.answerButton.disabled = true;<br/>        document.voice.releaseButton.disabled = false;<br/>    };<br/>    <br/>    cti.VoiceCallBack.on('established',onEstablished);<br/>    <br/>    var onReleased = function(ev){<br/>        cti.onStateChange(ev);<br/>        document.voice.connId.value = ev.connID;<br/>        document.voice.thisDN.value = ev.thisDN;<br/>        document.voice.answerButton.disabled = true;<br/>        document.voice.releaseButton.disabled = true;<br/>    };<br/>    <br/>    cti.VoiceCallBack.on('released',onReleased);<br/>    <br/>    <br/>    cti.reverseAjax();<br/>    <br/>    <br/>    <br/>    <br/>})</p><p> </p><p>这只是其中一种实现方式而已。Reverse ajax还可以通过NIO Socket向IE/FF的Applet Socket Client发送JSon Event,由Applet执行当前页面的fireEvent。</p><p>可以通过Spring,配置不同的Reverse ajax实现方式。如果有什么不理解的,请随时找我。 rasonyang@hotmail.com</p>

相关推荐

    微型计算机接口和外设的数据传输完美版资料.ppt

    接口电路的使用是由于微机的外部设备种类繁多,工作原理、驱动方式、信息格式以及速度各异,不能直接与CPU对接,因此需要一个中间层来协调这些差异。接口电路的主要功能包括寻址、输入/输出、数据转换、联络、中断...

    164个JAVA完美程序

    Java I/O流用于读写文件,网络编程,以及数据传输,这些程序可能会涵盖FileInputStream、FileOutputStream、BufferedReader、PrintWriter等类的使用,帮助学习者掌握输入输出操作。 线程是并发编程的基础,这些程序...

    单片机完美485总线程序

    例如,使用DMA(直接存储器访问)提高数据传输效率,或者采用轮询方式实时监控数据交换。 6. **错误处理**:在实际应用中,可能会遇到信号干扰、节点故障等问题,因此需要在程序中加入错误检测和恢复机制,如重试、...

    C#完美Socket服务器程序

    本项目“C#完美Socket服务器程序”旨在提供一个易于理解和使用的服务器端解决方案。 首先,我们需要了解Socket服务器的基本工作流程。当服务器启动时,它会创建一个Socket实例,并绑定到特定的IP地址和端口号。这...

    OLED屏幕完美显示驱动程序

    相比于I2C,SPI能提供更高的数据传输速率。7针的OLED屏幕通常包含四条信号线:时钟(SCK)、主设备输入/从设备输出(MISO)、主设备输出/从设备输入(MOSI)和从设备选择(CS)。 3. **Arduino与OLED屏幕的连接** ...

    STM32F103 DHT22 程序 完美实现

    在这个项目中,我们看到一个完整的程序,用于从DHT22传感器读取温度和湿度,并通过STM32F103微控制器的串行端口1(USART1)输出数据。以下是对这些知识点的详细解释: 1. **STM32F103微控制器**:STM32F103是意法...

    TQ2440 Nand Flash完美测试程序

    一个完美的NAND Flash测试程序应该包括以下几个关键部分: 1. **初始化**:程序首先会初始化NAND Flash控制器,设置合适的寄存器值,如时钟分频、读写时序、地址映射等。 2. **识别芯片**:通过读取NAND Flash的ID...

    Delphi远程高速屏幕传输及控制源码,完美支持到D2009

    在这个源码中,"Delphi远程高速屏幕传输及控制源码,完美支持到D2009"是一个实现远程桌面控制功能的项目,允许用户通过网络实时查看和控制另一台计算机的屏幕。这种技术在远程协助、系统管理、在线教育等领域有着...

    STM32F030SPI从机程序完美.rar

    这个压缩包中的“STM32F030SPI从机程序完美”应该是一个经过验证的、能够正常工作的SPI从机程序实例,可以直接在STM32F030平台上运行,无需额外的移植工作。 总结来说,STM32F030 SPI从机程序涉及的知识点主要包括...

    GPS串口数据采集程序

    标题中的“GPS串口数据采集程序”指的是一个利用串行通信接口(串口)与GPS接收器进行交互,收集GPS定位数据的软件应用。在计算机科学和IT领域,这种程序通常用于获取地理位置信息,比如在车辆跟踪、地理信息系统...

    完美的通信程序

    《构建完美的通信程序》 通信程序是信息技术领域中不可或缺的一部分,尤其在当今互联网时代,无论是客户端与服务器端的交互,还是设备间的通信,都离不开高效、稳定的通信协议和程序。本压缩包文件“客户端和服务器...

    传输线计算程序 电磁兼容屏蔽计算程序

    2. **电压驻波比(VSWR)分析**:VSWR是衡量传输线匹配度的一个指标,它描述了传输线上电压的波动程度。低的VSWR意味着良好的匹配,反之则表示存在反射。 3. **衰减和损耗**:传输线在传输信号时会因材料损耗、辐射...

    STM32F030SPI从机程序完美,stm32spi从机的配置,C/C++

    5. **中断处理**:为了及时响应主机的数据传输,可以配置中断。当SPI_I2S_FLAG_TXE(传输结束)或SPI_I2S_FLAG_RXNE(接收寄存器非空)标志被设置时,可以触发中断服务程序。 6. **数据读写**:在SPI从机模式下,...

    完美解码播放器控件,UDP命令控制

    “网络协议”则意味着这个控件使用了特定的网络通信规范,如UDP(User Datagram Protocol),这是一种无连接的传输层协议,适合于实时数据传输,因为它对延迟敏感,但可能不保证数据的顺序或完整性。 在压缩包子...

    vs2005环境下能完美运行的rs232串口程序

    标题中的“vs2005环境下能完美运行的rs232串口程序”指的是一个串行通信应用程序,它经过了适应性修改后能够在Visual Studio 2005(VS2005)开发环境中顺利运行。这个程序原本可能是为VC6.0设计的,而VC6.0是较旧的...

    大前端完美博客程序

    "大前端完美博客程序"是一个专门针对前端开发者设计的高效、功能完善的博客系统。这个程序旨在提供一个平台,让前端工程师能够展示他们的作品、技术分享和思考,同时也为其他开发者提供学习和交流的空间。"大前端"这...

    PROTRUS完美仿真电路及程序,DS1302+LCD1602

    标题中的“PROTRUS完美仿真电路及程序,DS1302+LCD1602”涉及了两个关键硬件组件的模拟和编程:DS1302实时时钟芯片和LCD1602液晶显示屏,以及一个用于仿真和程序开发的工具——Proteus。下面我们将深入探讨这些知识...

Global site tag (gtag.js) - Google Analytics