什么是Websocket?

  Websocket是一个独立于http的实时通信协议,最初是在HTML5中被引用进来的,在HTML5规范中作为浏览器与服务器的核心通信技术被嵌入到浏览器中。WebSocket的出现使得浏览器提供对Socket的支持成为可能,从而在浏览器和服务器之间提供了一个基于TCP连接的双向通道。

  在websocket诞生之前,服务端想要向客户端推送数据只能通过客户端向服务端主动发送请求才能获得。在构建实时Web应用时,最常用的就是轮询 (Polling)和Comet技术,而Comet技术实际上是轮询技术的改进,又可细分为两种实现方式,一种是长轮询机制,一种称为流技术。

  轮询:这是最早的一种实现实时 Web 应用的方案。客户端以一定的时间间隔向服务端发出请求,以频繁请求的方式来保持客户端和服务器端的同步。

  长轮询:长轮询则是针对普通轮询的这种缺陷的一种改进方案,其具体实现方式是如果当前请求没有数据可以返回,则继续保持当前请求的网络连接状态,直到服务端有数据可以返回或者连接超时。长轮询通过这种方式减少了客户端与服务端交互的次数,避免了一些无谓的网络连接。

  流:流就是在客户端的页面向服务端发出一个长连接的请求。服务器端接到这个请求后作出回应并不断更新连接状态以保证客户端和服务器端的连接不过期。通过这种机制可以将服务器端的信息源源不断地推向客户端。

  综上所述,以上这些方案实质上都是用ajax的方法模拟实时效果,实质上并没有实现真正的实时技术。同时每一次交互都是一次http请求和相应的过程,这就增加了网络的负载。

  Websocket是独立的基于TCP的协议,其跟http协议的关系仅仅是WebSocket的握手被http服务器当做Upgrade request http包处理。Websocket有自己的握手处理过程。

  Websocket链接由客户端发起握手请求,协议内容如下:

1 GET /chat HTTP/1.1
2 Host: server.example.com
3 Upgrade: websocket
4 Connection: Upgrade
5 Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
6 Sec-WebSocket-Protocol: chat, superchat
7 Sec-WebSocket-Version: 13
8 Origin: http://example.com

服务端的相应如下:

1 HTTP/1.1 101 Switching Protocols
2 Upgrade: websocket
3 Connection: Upgrade
4 Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
5 Sec-WebSocket-Protocol: chat

  一旦建立了连接,服务端与客户端之间就可以以全双工方式进行通信。

  自己在本地起了一个websocket服务端,然后创建了一个websocket链接,如下图所示:

什么是Socket.io?

  有很多人经常讲Socket.io与websocket搞混,实际上他们并不完全等同。它一个完全由JavaScript实现、基于Node.js、支持WebSocket协议用于实时通信、跨平台的开源框架,它包括了客户端的JavaScript和服务器端的Node.js。也就是说Socket.io将Websocket和轮询(Polling)机制以及其它的实时通信方式封装成了通用的接口,并且在服务端实现了这些实时通信机制。

  Socket.io中主要使用了websocket,将轮询作为其辅助选项,提供的是相同的接口。其与node.js一样,也是事件驱动的。

参考:

http://www.websocket.org/

https://github.com/socketio/socket.io

http://socket.io/

http://blog.csdn.net/ishallwin/article/details/10299815

http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/index.html

转载于:https://www.cnblogs.com/cishengchongyan/p/6106602.html

websocket与socket.io相关推荐

  1. h5 socket.io java,从HTML5 WebSocket到Socket.io

    HTML5 WebSocket 作为新一代的web标准,HTML5为我们提供了很多有用的东西,比如canvas,本地存储(已经分离出去了),多媒体编程接口,当然还有我们的WebSocket.WebSo ...

  2. websocket和socket.io

    websocket 三次握手 ws协议和http协议的区别 http HTTP是单向的,客户端发送请求,服务器发送响应.每个请求都与一个对应的响应相关联,在发送响应后客户端与服务器的连接会被关闭.每个 ...

  3. 【websocket】socket.io 例子:chat服务

    基于socket.io快速实现一个实时通讯应用 看起来是一篇超牛的文章. Socket.IO Chat A simple chat demo for Socket.IO How to use $ np ...

  4. Nodejs实时通讯 在线聊天室(Socket.io)_收藏

    前言 网络聊天室在web1.0的时代就出现了,但当时技术支持比较有限,大都是通过浏览器插件BHO,JavaApplet,Flash实现的.如今HTML5技术风起云涌,通过websocket实现的网络聊 ...

  5. Socket.io:有点意思

    个人网站 欢迎品尝 edwardesire.com 下面页面就是使用Socket.io制作的口袋妖怪游戏(默认小屏下已隐藏,请切换到大分辨率查看).左边是游戏画面,右边是按键表和聊天室.画面达到红蓝版 ...

  6. SpringBoot(23) 集成socket.io服务端和客户端实现通信

    一.前言 websocket和socket.io区别? websocket 一种让客户端和服务器之间能进行双向实时通信的技术 使用时,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况 适合用于cli ...

  7. 关于Socket.IO的知识点记录

    最近因为项目的需要,开始学习nodejs,本着js的那点儿功底,nodejs学习起来还是挺快能上手的.随着深入学习,知道了express框架并那它写了一个小功能,作为一个php程序员哈,在expres ...

  8. socket.io client + socketio-netty server简析

    一. 背景: 现在实时web消息推送一般会用到websocket,但是由于此技术并没有推广开来,所以各浏览器对其支持也不同,例如下图显示了各类浏览器的支持情况. 粉红色区域表示不支持Websocket ...

  9. 使用 Nginx 代理 Socket.io/WebSocket 及 负载均衡配置

    2019独角兽企业重金招聘Python工程师标准>>> 转自:http://naux.me/using-nginx-with-socketio/ 0,介绍 Socket.io 一套是 ...

最新文章

  1. TOAD FOR MYSQL 进行数据插入时乱码的解决办法---MariaDB 5.5
  2. fgo日服服务器维护,【FGO日服】活动维护通知(1/10)
  3. Xcode升级后插件失效的原理与修复办法
  4. 今天在cnblog开博啦
  5. 华为nova好不好 先看图
  6. 【做题记录】CF1451E2 Bitwise Queries (Hard Version)
  7. UITabBarController中自定义UITabBar
  8. 【备忘】mysql常用操作汇总
  9. 如何优化项目进度管理
  10. 使用linux批量引物设计,primer3引物设计详解
  11. redis集群工具redis-trib制作并打包上传到私有Harbor
  12. vue中图片加载不出来的问题
  13. 莫比乌斯反演学习笔记
  14. 1-AO3402MOS管使用
  15. 用python做元旦贺卡_用AI帮你画新年贺卡:只需输入几个单词,就能模仿大师名作...
  16. NatureProtocols:使用MicrobiomeAnalyst统计和功能分析微生物组数据
  17. android 读文字软件,文字语音朗读软件
  18. 《Adobe InDesign CS5中文版经典教程》—第1课1.2节工作区简介
  19. 方舟生存进化助手隐私政策条款
  20. 复制百度文库文字收费内容

热门文章

  1. mysqlclient==1.3.7对应mysql版本_Python通过MySQLdb访问操作MySQL数据库
  2. Neo4j 导入动态类型关系
  3. 零基础考信息系统项目管理师要怎么准备?
  4. 2020年1月份学习总结,死线(Deadline)杀死团队拖延症
  5. SpringBoot+Vue实现指定账号审批单据时前端进行语音播报
  6. Fabricjs使用Group实现组合对象
  7. CentOS中使用Dockerfile部署初始化sql文件的mysql
  8. Windows中将文件压缩成linux支持的tar.gz格式的压缩包
  9. synamic-datasource-spring-boot-starter实现动态数据源Mysql和Sqlserver
  10. AndroidStudio打开新项目后解决下载某版本gradle慢的问题