资讯专栏INFORMATION COLUMN

socket.io之一: 介绍

william / 264人阅读

摘要:在标准没有推出之前,轮询是唯一可行的方式通过浏览器也可以,但这里不做讨论。这种方式存在延时且对服务端造成很大负载。直到年,才标准化一种基于套接字进行收发数据的协议。现如今主流浏览器均已支持。

socket.io提供了基于事件的实时双向通讯

历史

Web端与服务器间的实时数据传输的是一个很重要的需求,但最早只能通过AJAX轮询询实现。在WebSocket标准没有推出之前,AJAX轮询是唯一可行的方式(通过Flash浏览器也可以,但这里不做讨论)。AJAX轮询原理是设置定时器,定时通过AJAX同步服务器数据。这种方式存在延时且对服务端造成很大负载。直到2011年,IETF才标准化WebSocket——一种基于TCP套接字进行收发数据的协议。现如今主流浏览器均已支持WebSocket。

socket.io将数据传输部分独立出来形成了engine.io, engine.io对WebSocket和AJAX轮询进行封装,形成一套API,屏蔽了细节差异和兼容性问题,实现了跨浏览器/跨设备进行双向数据。

socket.io对engine.io不是必须的,你也可以实现自己的engine.io,通过server.bind绑定

应用

实时数据分析展示(报表,日志)

即时通讯、聊天,

二进制流(图片,音乐,视频)传输

多人协同编辑

即时消息推送

类似技术

AJAX轮询: 基于XMLHttpRequest的AJAX轮询

AJAX长轮询: 类似轮询,服务器在客户端请求后不返回响应,直到有数据需要传到客户端,传完数据后客户端再发起新的请求。缺点是要额外传输的HTTP头,保持住请求不响应也需要一些额外工作。

HTTP流: 与AJAX长轮询类似,服务端响应会带上HTTP头: Transfer-Encoding: chunked,返回完数据到客户端后客户端也不需要发起新的请求,缺点是各个chunk之间的数据难以识别和处理。

插件: 类似Flash,Silverlight, 作为插件越来越被主流浏览器和用户排斥

下面就不同角度对各技术进行分析

单向/双向

单向: AJAX轮询,AJAX长轮询,HTTP流

双向: WebSocket, 插件

延时

WebSocket < 插件 < HTTP流 < AJAX长轮询 < AJAX轮询

效率

插件 > WebSocket > HTTP流 > AJAX长轮询 > AJAX轮询

移动端支持

WebSocket: 基本均支持
HTTP流,AJAX长轮询,AJAX轮询: 基本均支持
插件: 基本不支持

开发或设置难易程度

WebSocket < AJAX轮询 < 插件 < AJAX长轮询,HTTP流

结论

socket.io封装了WebSocket,不支持WebSocket的情况还提供了降级AJAX轮询,功能完备,设计优雅,是开发实时双向通讯的不二手段。

更多文章的目录在这里

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82558.html

相关文章

  • Redis 系列之一

    摘要:这个文件事件处理器是单线程的,所以叫做单线程模型,采用多路复用机制同时监听多个,根据上的事件来选择对应的事件处理器处理这个事件。 为什么使用缓存 优点: 高性能 高并发 MySQL天然对高并发不好,MySQL单机支撑2000qps也开始容易报警,可以使用缓存,让数据查询从缓存中拿出数据 缺点: 缓存的数据和数据库的数据不一致 缓存雪崩 缓存穿透 缓存并发竞争 redis 和m...

    chengjianhua 评论0 收藏0
  • Redis 系列之一

    摘要:这个文件事件处理器是单线程的,所以叫做单线程模型,采用多路复用机制同时监听多个,根据上的事件来选择对应的事件处理器处理这个事件。 为什么使用缓存 优点: 高性能 高并发 MySQL天然对高并发不好,MySQL单机支撑2000qps也开始容易报警,可以使用缓存,让数据查询从缓存中拿出数据 缺点: 缓存的数据和数据库的数据不一致 缓存雪崩 缓存穿透 缓存并发竞争 redis 和m...

    ysl_unh 评论0 收藏0
  • Redis 缓存之一

    摘要:这个文件事件处理器是单线程的,所以叫做单线程模型,采用多路复用机制同时监听多个,根据上的事件来选择对应的事件处理器处理这个事件。 为什么使用缓存 优点: 高性能 高并发 MySQL天然对高并发不好,MySQL单机支撑2000qps也开始容易报警,可以使用缓存,让数据查询从缓存中拿出数据 缺点: 缓存的数据和数据库的数据不一致 缓存雪崩 缓存穿透 缓存并发竞争 redis 和m...

    levius 评论0 收藏0
  • 一篇文章带你彻底搞懂NIO

    摘要:阻塞当进行读写时,线程是阻塞的状态。当任何一个收到数据后,中断程序将唤起进程。接收数据当收到数据后,中断程序会给的就绪列表添加引用。当接收到数据,中断程序一方面修改,另一方面唤醒等待队列中的进程,进程再次进入运行状态如下图。 本篇文章目的在于基本概念和原理的解释,不会贴过多的使用代码。 什么是NIO Java NIO (New IO)是 Java 的另一个 IO API (来自 jav...

    ziwenxie 评论0 收藏0
  • 利用 socket.io 实现消息实时推送

    摘要:为了达到这种双向的实时消息传递,很明显地考虑用来实现。注意这个文件并不能用在实际的项目中,只是用来显示消息推送的效果而已。参考资料本文在我博客上的原地址利用实现消息实时推送 项目背景介绍 最近在写的项目中存在着社交模块,需要实现这样的一个功能:当发生了用户被点赞、评论、关注等操作时,需要由服务器向用户实时地推送一条消息。最终完成的项目地址为:socket-message-push,这里...

    RobinQu 评论0 收藏0

发表评论

0条评论

william

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<