W3C给出了答案,在新一代html标准html5中提供了一种浏览器和服务器间进行全双工通讯的网络技术Websocket 。从Websocket草案得知,Websocket是一个全新的、独立的协议,基于TCP协议,与请求而已 。
与)过程,建立连接之后,双方即可双向通信 。
有关WebSocket的详细介,请参见即时通讯网有关WebSocket的系列文章:《WebSocket详解(一):初步认识WebSocket技术》、《WebSocket详解(二):技术原理、代码演示和应用案例》、《WebSocket详解(三):深入WebSocket通信协议细节》 。
从浏览器支持角度来看,WebSocket已经近在眼前,但仍有一段较长的路要走,特别是在中国这个IE6、7、8依然盛行的国家,旧版本浏览器的消亡需要很长一段时间,在完全实现浏览器全兼容前,Comet技术可能仍然是最好的解决方案 。不过,当前也已存在一些比较成熟的封装方案来解决这种兼容性限制,比如:开源的Socket.io,详见《Socket.IO介绍:支持WebSocket、用于WEB端的即时通讯的框架》 。
SSE:未来的解决方案2SSE(Server-Sent Event,服务端推送事件)是一种允许服务端向客户端推送新数据的HTML5技术 。与由客户端每隔几秒从服务端轮询拉取新数据相比,这是一种更优的解决方案 。
与WebSocket相比,它也能从服务端向客户端推送数据 。那如何决定你是用SSE还是WebSocket呢?概括来说,WebSocket能做的,SSE也能做,反之亦然,但在完成某些任务方面,它们各有千秋 。
WebSocket是一种更为复杂的服务端实现技术,但它是真正的双向传输技术,既能从服务端向客户端推送数据,也能从客户端向服务端推送数据 。
WebSocket和SSE的浏览器支持率差不多,大多数主流桌面浏览器两者都支持 。在Android 4.3以及更早的版本中,系统默认浏览器两者都不支持,Firefox和Chrome则完全支持;Android 4.4中,系统默认浏览器两者都支持;Safari从5.0开始支持SSE(iOS系统从4.0开始),但直到6.0才正确地支持WebSocket(6.0之前的Safari所实现的WebSocket协议存在安全问题,所以一些主流浏览器已经禁用了基于这个协议的实现) 。
与WebSocket相比,SSE有一些显著的优势 。个人认为它最大的优势就是便利:不需要添加任何新组件,用任何你习惯的后端语言和框架就能继续使用 。你不用为新建虚拟机、弄一个新的IP或新的端口号而劳神,就像在现有网站中新增一个页面那样简单 。我喜欢把这称为既存基础设施优势 。
SSE的第二个优势是服务端的简洁 。相对而言,WebSocket则很复杂,不借助辅助类库基本搞不定(我试过,令人痛苦) 。
因为SSE能在现有的,甚至直接在命令行中运行后端脚本 。
不过,这就引出了WebSocket相较SSE的一个潜在优势:WebSocket是二进制协议,而SSE是文本协议(通常使用UTF-8编码) 。当然,我们可以通过SSE连接传输二进制数据:在SSE中,只有两个具有特殊意义的字符,它们是CR和LF,而对它们进行转码并不难 。但用SSE传输二进制数据时数据会变大,如果需要从服务端到客户端传输大量的二进制数据,最好还是用WebSocket 。
WebSocket相较SSE最大的优势在于它是双向交流的,这意味向服务端发送数据就像从服务端接收数据一样简单 。用SSE时,一般通过一个独立的Ajax请求从客户端向服务端传送数据 。相对于WebSocket,这样使用Ajax会增加开销,但也就多一点点而已 。如此一来,问题就变成了“什么时候需要关心这个差异?”如果需要以1次/秒或者更快的频率向服务端传输数据,那应该用WebSocket 。0.2次/秒到1次/秒的频率是一个灰色地带,用WebSocket和用SSE差别不大;但如果你期望重负载,那就有必要确定基准点 。频率低于0.2次/秒左右时,两者差别不大 。
推荐阅读
- 有哪些好看的av,我们学会了AV观影模式
- 真三国无双7和8哪个更好_2个版本对比
- 工作室项目推荐,工作室创业计划书
- 网上开店卖什么,网上开店铺需要什么流程
- 最新天赋,英雄联盟公布了最新的重做符文天赋
- 现在做什么行业最赚钱,在中国最赚钱的4个行业
- nba2k15显卡配置要求_最低配置介绍
- 三国无双7猛将传if模式什么意思_if模式操作教程分享
- 家里进水了怎么办排水,下水道进水怎么办下大雨下水道就冒水
