页面刷新
页面刷新即通过刷新页面来更新聊天记录,通过页面提交来发送消息。毫无疑问,这种实现是最简单的,也是效率最差的。它意味着每一次收发消息都对应了一次httprequest,而http作为应用层协议,连接代价是相当大的。
ajax
ajax可以理解为xmlhttprequest,本质与页面刷新相同,但是页面上会有很多资源文件,比如图片、css、js、flash,这些文件会随着页面刷新并且没有做浏览器端缓存的时候更新。为了接收或者发送数十字节的消息而更新可能多达数百K字节的字节文件,显然是很愚蠢的。所以使用ajax来通讯,"只"需要为消息的获取或者发送而进行请求。ajax从这一点上是优于页面刷新的。
comet/server push
ajax为每一个消息的发送和接收建立一个新的http连接,并在短暂通讯完毕以后关闭。而server push的本质是http长连接,它的思路是,让服务器和浏览器维持着一个时间跨度很长的http连接,这个http连接可能大部分时候并不需要做什么,只在有消息的时候,向浏览器写入。所以这种方式避免了建立以及关闭http连接时大量的开销,提高了资源利用率。不过server push也有它的问题,在一个web服务器上,http连接数并非没有限制,所以如果把http连接数也看作是系统资源的话,server push确实是对于此资源的极大浪费了。
comet是server push的思路上的一种改进,它在ajax和server push之间使用了一种折中的策略,在高频率的通讯过程中,comet使用http长连接。一旦通讯变得不频繁,comet便释放http连接,并在下一次通讯的时候,是情况而定,看是否需要建立http长连接。
server push在asp.net中可以通过下面的代码片段实现:
protected void Page_Load(object sender, EventArgs e) {
while (IsSessionEnd as bool) {
lock(token as object) {
Response.Write(message as string);
Response.Flush();
}
}
}
(当然,在实际编码中,as type的写法是不必要的,这里只是为了说明类型)
可以看到,在上面的代码片段中,会话结束前,Response.End()都不会被调用。
socket/tcp
在页面刷新、ajax和server push的思路里,最重要的一个共同点就是基于http。http是web的基础,然而http并不符合即时通讯系统的思想,很大程度上是由于http几个特点:
[
http是无状态的,
http是一问一答的,
http是单播的,
http是应用层协议,通讯代价很大
]
然而http的下层协议tcp/udp就很适合用来做为即时通讯系统的通讯协议。可是在web标准里,一切都是基于http的。幸运的是,我们可以通过浏览器插件的信路来完成通讯,在java applet、flash和silverlight里,都提供了socket/tcp,并且dom和flash或silverlight是可以互操作的。这就意味着,dom也可以间接的使用socket来与服务器通讯。
分享到:
相关推荐
总之,融云即时通讯SDK提供了一套全面且易用的通信工具,让开发者能够专注于自己的产品创新,而无需从头构建复杂的通信基础设施。通过深入学习和使用融云SDK,开发者可以极大地提升其应用的交互性和用户体验。
JavaScript Shadow是一个创新的Web引擎项目,它展示了JavaScript语言在构建高性能网络应用方面的潜力。这个引擎几乎完全使用JavaScript从头开始编写,打破了传统上由C++或Rust等系统级语言主导的浏览器内核构建模式...
GoEasy是一个云服务提供商,专注于为开发者提供简单易用的即时通讯(IM)服务。通过GoEasy的服务,开发者无需从头构建复杂的网络通信架构,可以极大地缩短开发周期,提高应用程序的稳定性和性能。 在源码中,我们...
文件“binux-pyspider-c350f62”很可能是指PySpider的一个特定版本,这个版本可能包含了源代码或者预编译的二进制文件,使得用户可以直接安装和运行PySpider,无需从头构建整个项目。 总的来说,PySpider是一个全...
总的来说,这个基于openfire的javaweb聊天项目提供了一个基础的Web即时通讯平台,方便开发者快速部署并根据自身需求进行扩展。通过学习和理解这个项目,开发者可以深入掌握Java Web开发、Openfire服务器的集成、XMPP...
总的来说,"Vchat — 从头到脚,撸一个社交聊天系统”项目涵盖了前端开发、后端开发和数据库管理等核心技能,对于学习和理解现代Web应用程序的架构和开发流程具有极高的参考价值。通过这个项目,开发者可以深入理解...
即时通讯(Instant Messaging, IM)系统是现代通信技术中的一个重要组成部分,它提供了实时、便捷的信息交流平台。本文主要探讨的是基于Jabber协议栈构建的IM系统,该系统利用了开放源代码的XMPP(Extensible ...
综上所述,Open-IM-Server是一个强大且灵活的即时通讯解决方案,它提供了一整套工具和框架,让开发者可以专注于构建自己的IM应用,而无需从头开始解决底层通信问题。通过学习和掌握Open-IM-Server,开发者能够构建出...
Easemob是环信公司提供的实时通讯云服务,它允许开发者快速集成聊天、群组、消息推送等即时通讯功能到自己的应用中,无需从头构建复杂的通讯基础设施。Easemob提供了多种SDK,支持Android、iOS、Web、PC等多平台,并...
总的来说,NaquadahBrowser是一个展示Julia语言在构建复杂软件系统能力的实例,尤其是在GUI和网络应用领域。通过这个项目,开发者不仅可以学习到Julia语言的实践应用,还可以深入了解Web浏览器的工作原理,包括GUI...
本教程将深入浅出地介绍如何利用Dreamwave8来开发一个完整的商务网站,帮助你掌握这款软件的核心功能。 一、Dreamwave8简介 Dreamwave8是Adobe公司出品的一款专业级网页设计软件,其强大的功能涵盖了网页布局、图像...
Java Web 在线聊天系统是一种基于Web技术实现的实时通信应用,它允许用户...以上就是构建Java Web在线聊天系统涉及的主要技术点和知识点,这些技术相互配合,共同构建出一个高效、稳定且用户体验良好的在线聊天环境。
在信息技术领域,软件开发是一个复杂而细致的过程,尤其是在构建后台管理系统时。本文将深入探讨一种基于Visual Studio 2010(VS2010)和SQL Server 2012的通用后台B/S(Browser/Server,浏览器/服务器)架构,以及...
- "OurSimpleWebServer"和"Class0604Web_第一个一般处理程序"项目展示了如何从头开始编写自己的Web服务器。这有助于理解HTTP协议的工作原理和如何处理HTTP请求。 3. **HTTP协议**: - 在"聊天室完结(小文件传输)_...
【标题】"im_im_phpim插件_" 描述了一个基于PHP开发的即时通讯(IM)插件,这个插件设计用于在Web应用中实现在线聊天功能。它允许用户实时交流,提升网站或平台的交互性。 【PHPIM插件】是PHP编程语言实现的即时...
LayIM是一个由layui团队开发的即时通讯组件,适用于构建PC端和移动端的聊天系统。它提供了丰富的API和自定义功能,如好友列表、群组聊天、离线消息推送等。LayIM支持多种应用场景,包括一对一私聊、群组聊天以及聊天...
- **Shift-F11**:清理并构建主项目,确保从头开始构建。 - **Ctrl-Q**:设置请求参数,用于Web应用的调试。 - **Ctrl-Shift-U**:创建JUnit测试,为现有类生成测试框架。 - **Ctrl-F6/Alt-F6**:运行JUnit测试于...
聊天窗口是一种常见的Web应用组件,用于实现实时通信,常见于社交媒体平台、在线客服系统以及各类协作工具中。 【描述】:“一款基于CSS3和HTML5的自定义聊天窗口.zip” 描述中的“自定义”意味着这个聊天窗口设计...
FreeSWITCH是一个开源的、多平台的通信系统,主要用于构建VoIP(Voice over Internet Protocol)和WebRTC(Web Real-Time Communication)解决方案。标题中的“freeswitch1.8英文版.zip”表明这是一个关于FreeSWITCH...