当前位置: 首页 > news >正文

WebSocket于HTTP 、WebSocket与Socket的区别

WebSocket于HTTP 、WebSocket与Socket的区别

最近在做一个IM 的项目,最近对于这块的理解比较模糊,这里对他们的不同和相同做一个区分,但是由于这个项目需要在IOS、Android和Web中多平台,最后选择了WebSocket;

这里有一张图详细介绍了 TCP/IP 协议族中的各个协议在 OSI模型 中的分布,一图胜千言(下图来自 科来)

1. WebSocket介绍

原理

WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。

连接过程 —— 握手过程

    1. 浏览器、服务器建立TCP连接,三次握手。这是通信的基础,传输控制层,若失败后续都不执行。
    1. TCP连接成功后,浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息。(开始前的HTTP握手)
    1. 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据。
    1. 当收到了连接成功的消息后,通过TCP通道进行传输通信

2. WebSocket于HTTP

相同点

    1. 都是应用层协议基于TCP协议来传输数据的,都是可靠性传输协议。
    1. 都是应用层协议。

不同点

    1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
    1. WebSocket是需要握手进行建立连接的。

联系

WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。

3.WebSocket与Socket的关系

Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口,它工作在 OSI 模型会话层(第5层),是为了方便大家直接使用更底层协议(一般是 TCP 或 UDP )而存在的一个抽象层。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。

区别

Socket是传输控制层协议,WebSocket是应用层协议。

Star 我的GitHub

# Back

转载于:https://juejin.im/post/5b87414951882542e56e5f39

相关文章:

  • WPF中Binding使用StringFormat格式化字符串方法
  • [四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式...
  • P2P
  • 深入学习Java虚拟机——虚拟机字节码执行引擎
  • Win7+Ubuntu11
  • Redis系列十:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
  • select默认样式修改
  • 共识指数榜单0904
  • 网络编程 --ftp01上传
  • Predicate
  • LayUI 开始日期到结束日期
  • 托福雅思
  • Wepy--小程序自定义底部tabBar
  • Alibaba Java Coding Guidelines
  • 10个确保微服务与容器安全的最佳实践
  • 【EOS】Cleos基础
  • ➹使用webpack配置多页面应用(MPA)
  • javascript数组去重/查找/插入/删除
  • js ES6 求数组的交集,并集,还有差集
  • SQLServer插入数据
  • Vue全家桶实现一个Web App
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 安卓应用性能调试和优化经验分享
  • 第2章 网络文档
  • 给初学者:JavaScript 中数组操作注意点
  • 欢迎参加第二届中国游戏开发者大会
  • 讲清楚之javascript作用域
  • 前端js -- this指向总结。
  • 区块链技术特点之去中心化特性
  • 我感觉这是史上最牛的防sql注入方法类
  • 字符串匹配基础上
  • hi-nginx-1.3.4编译安装
  • ​520就是要宠粉,你的心头书我买单
  • ​queue --- 一个同步的队列类​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #define 用法
  • #if #elif #endif
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (2)nginx 安装、启停
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (day6) 319. 灯泡开关
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (安卓)跳转应用市场APP详情页的方式
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • ****Linux下Mysql的安装和配置
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net Winform开发笔记(一)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net(C#)中String.Format如何使用