`
happysoul
  • 浏览: 401737 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

DWR comet 长连接实现在线对话-简易版

    博客分类:
  • DWR
 
阅读更多
第一个实验,先调试实现不区分客户端的在线对话,即所有的在线用户发言其他人都可以收到消息

多手记下http通信协议中的三次握手
第一次
建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

后面只需要理解数据传输就可以了
(客户端)请求数据 --> (服务器)收到相应,传输用户需要的数据 --> (客户端)接收数据并显示

comet的原理实际就是在客户端等待服务器相应的时候使用长连接的方式延长了服务器向客户端发送数据的时间,一般是1分钟左右



旋转的菊花是亮点
如图所示,客户端一直等待服务器相应,1分钟后中断连接重新发送连接请求进入下一个1分钟的等待时间直到服务器返回数据后结束本次连接再次发送一个新的请求等待服务器发送数据

上图是sina微博使用comet实现的长连接方式实现消息推送,1m41s中前面的连接即等待数据的耗时,当微博获取了更新信息的时候就会结束此次连接打开一个新的等待

从头信息可以看出新浪微博也不得不使用jetty作为消息服务器发送即时消息

目前为止我仅对DWR简单试验了一下,虽然js的包比较大,不过能够实现即时消息还是值得使用的



简单的测试类只需要jar文件、一个java消息处理文件、dwr配置文件、web.xml就可以得到一个简单的测试项目



public class Message {
	private List<String> messages = new LinkedList<String>();
	
	public void addMessage(String message) {
		System.out.println("消息:" + message);
		messages.add(message);
		Browser.withCurrentPage(new Runnable() {// 启用监听客户端当前页线程
			public void run() {// 把数据添加到客户端调用的方法中
				ScriptSessions.addFunctionCall("receiveMessages", messages);
			}
		});
	}

}

使用linkedlist存放消息记录,新用户连接的时候也可以获取到历史存放的数据

用户之间单发还有些问题待理解和完善 つづく...

  • 大小: 52.5 KB
  • 大小: 13.4 KB
  • 大小: 17.7 KB
  • 大小: 12.9 KB
  • 大小: 39.3 KB
2
1
分享到:
评论
5 楼 happysoul 2012-03-02  
smith789 写道
  
ps:魔卡等级很高了吧?

这都被你发现了 呵呵!才44级而已~
4 楼 smith789 2012-03-02  
  

ps:魔卡等级很高了吧?
3 楼 happysoul 2011-12-29  
5681 写道
JS没?  

你要什么JS?
dwr的?都在他的jar包里面封装了,没必要在单独拿出来
2 楼 5681 2011-12-28  
JS没?  
1 楼 5681 2011-12-28  
不错的文章

相关推荐

    dwr comet的MyEclipse工程,可直接运行

    标题 "dwr comet的MyEclipse工程,可直接运行" 提供了我们今天要讨论的核心内容,即一个基于DWR(Direct Web Remoting)技术的Comet应用,它已经被集成到MyEclipse环境中,并且是可立即运行的状态。首先,我们需要...

    Spring整合DWR comet 实现无刷新 多人聊天室代码整理

    而Comet则是一种服务器推送技术,它能保持HTTP连接长时间打开,使得服务器可以主动向客户端发送数据,从而实现无刷新更新。 首先,Spring框架提供了强大的依赖注入和AOP(面向切面编程)功能,使得代码更加模块化和...

    用DWR comet+Spring实现服务器推送的例子--网页聊天室

    标题中的“用DWR comet+Spring实现服务器推送的例子--网页聊天室”涉及到的是Web开发中的实时通信技术。DWR(Direct Web Remoting)是一个开源Java库,它允许JavaScript在浏览器和服务器之间进行直接的、安全的远程...

    DWR comet的完整实现.pdf

    ### DWR Comet 的完整实现分析 #### 一、引言 DWR (Direct Web Remoting) 是一种简化Ajax开发的框架,它使得JavaScript能够直接调用服务器端的Java方法,从而实现了更为流畅的用户交互体验。Comet技术则是一种允许...

    dwr长连接demo

    DWR通过建立持久的HTTP连接(长连接)来提高性能和用户体验,这种方式被称为 comet 技术。下面将详细阐述DWR长连接的工作原理、优势、配置以及如何创建一个简单的DWR长连接示例。 1. DWR长连接工作原理: DWR利用...

    用DWR的comet推,实现多人聊天室

    【描述】: 本文主要探讨如何通过Spring与Direct Web Remoting (DWR)框架的整合,利用Comet技术来构建一个无需刷新页面的多人在线聊天室。Comet是一种实现服务器到客户端实时通信的技术,它解决了传统的Ajax轮询带来...

    dwr.jar/dwr-2.0.5-src.zip/dwr.zip

    这可能是一个重复的文件,或者包含了与dwr.jar和dwr-2.0.5-src.zip不同的内容,比如可能是DWR的配置文件、文档或者特定环境的构建版本。通常,这样的zip文件会包含部署所需的全部资源,包括Web应用的结构和配置文件...

    Spring整合DWR comet 实现无刷新 多人聊天室

    Spring整合DWR(Direct Web Remoting)以实现Comet技术,是构建实时、无刷新的多人聊天室的一种高效方法。这种技术允许服务器向客户端推送数据,而无需客户端频繁发起请求,从而大大提升了用户体验。下面我们将深入...

    dwr 长连接

    DWR的核心特性之一就是支持长连接,这使得Web应用能够实现类似于桌面应用的即时交互。 ### DWR长连接基础 长连接,又称持久连接,是指客户端与服务器之间建立一次连接后,可以进行多次请求和响应,而不需要反复地...

    dwr-comet.zip_DEMO_comet_dwr comet_dwr comet_消息推送 java

    实现Comet消息推送功能,根据登陆人定向推送,解决刷新页面原有ScriptSession不能及时销毁的问题,DEMO比较简陋,请先进入login.jsp页面登陆。根据登陆名称判断推送目标,可登陆多个用户进行测试。

    dwr comet 使用示例,使用spring作为后台的管理容器

    压缩包中的`dwr-comet`可能包含以下文件: - `dwr-config.xml`:DWR的配置文件,定义了暴露给JavaScript的对象和方法。 - `web.xml`:Web应用的部署描述符,配置了DWR的Servlet。 - `Spring配置文件`:定义了DWR相关...

    DWR_comet_0100.zip_ChatService.js_DWR_comet_0100_comet_dwr SPRIN

    DWR的Comet技术正是实现了这种功能,通过长时间连接(Long Polling)或流式传输(Streaming)等方法,使得服务器可以在有新消息时即时通知客户端。 `ChatService.js`是这个聊天程序中客户端部分的关键脚本,它包含...

    dwr与spring整合的相关资料收集 包括一个例子 dwr-comet

    8. **DWR Comet**: `dwr-comet`可能指的是DWR的Comet技术,这是一种长连接技术,可以让服务器主动推送数据到客户端,实现双向通信。DWR的Comet支持可以与Spring的事件驱动模型结合,创建实时更新的应用。 这个资料...

    dwr_comet_im.rar_DEMO_comet.tld_java comet

    在这个"**dwr_comet_im.rar_DEMO_comet.tld_java comet**"的压缩包中,包含了一个关于DWR实现Comet技术的DEMO,以及一个名为"DWR的comet技术实现及时通讯原理.docx"的文档,这将帮助我们理解如何利用DWR和Comet实现...

    DWR+JAVA进行web消息推送dwr-comet.zip

    在DWR中,Comet技术是实现长时间连接和实时数据推送的关键。 首先,我们需要了解Comet技术的基本概念。Comet是一种Web编程模式,用于实现在服务器向客户端推送数据时保持持久连接。传统的HTTP协议是基于请求-响应...

    整理好的DWR-2.0.5-src

    这个不是我的原创,原文件出至这里:...原资源包含了,源代码和API Doc,只是美中不足的是没有整理成可用的zip文档,我这特分离了一下,并重新打好包了,初步测试了一下能用。

    DWR 长连接方式上传图片

    5. **进度反馈**:在DWR的长连接模式下,服务器可以实时地向客户端报告上传进度,更新UI,提供更好的用户体验。 6. **错误处理**:在上传过程中,DWR可以捕获和处理可能出现的错误,例如网络中断或文件格式不支持等...

    dwr源码包,dwr.jar包下载

    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; &lt;servlet-class&gt; org.directwebremoting.servlet.DwrServlet &lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; &lt;param-value&gt;true...

    dwr-下拉菜单实现

    ### dwr-下拉菜单实现 #### 知识点概览 本文将详细介绍如何使用DWR(Direct Web Remoting)框架结合JavaScript与HTML技术来实现动态下拉菜单功能。主要涉及的技术点包括:DWR的基本原理、如何通过DWR调用服务器端...

Global site tag (gtag.js) - Google Analytics