首页 > 其他分享 >#yyds干货盘点#区别WebSocket 与 Socket

#yyds干货盘点#区别WebSocket 与 Socket

时间:2023-04-22 19:06:18浏览次数:39  
标签:yyds HTTP Socket TCP API WebSocket 服务端

WebSocket 是什么

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次 HTTP 握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。


为什么有了 HTTP 还需要 WebSocket?

一般情况下我们使用 HTTP 有一个很大的缺陷,就是 HTTP 只能由客户端来主动发起,如果有需要服务端主动通知的业务,就需要轮训。轮询的效率低,非常浪费资源。为了解决 Web 端即时通讯的需求就出现了 WebSocket。

兼容性

WebSocket 最早是在 HTML5 标准中的一部分,基本现代浏览器都是支持的,都可以直接使用。虽然是 HTML5 的一部分,但是在浏览器之外也有相应的实现。比如 Socket.io 这个库支持 Java、C++、Swift、Datr ,Python 的 ws4py,C++ 的WebSocket++ 等等。 服务端主流的 Web 容器如 Apache、Nginx、Tomcat 也都支持 WebSocket,还有 WebSocket 服务端框架如 websocketd 等。

Socket 是什么


Unix 中的 Socket

操作系统中也有使用到 Socket 这个概念用来进行进程间通信,它和通常说的基于 TCP/IP 的 Socket 概念十分相似,代表了在操作系统中传输数据的两方,只是它不再基于网络协议,而是操作系统本身的文件系统。


网络中的 Socket

网络中的 Socket 并不是什么协议,而是为了使用 TCP,UDP 而抽象出来的一层 API,它是位于应用层和传输层之间的一个抽象层。Socket 是对 TCP/IP 的封装;HTTP 是轿车,提供了封装或者显示数据的具体形式;Socket 是发动机,提供了网络通信的能力。在 Unix 一切皆文件哲学的思想下,Socket 是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。所以如果你想基于 TCP/IP 来构建服务,那么 Socket API 可能就是你会接触到的API。


WebSocket 与 Socket 的区别

正如如上所说:

  1. Socket 是传输控制层的接口。用户可以通过 Socket 来操作底层 TCP/IP 协议族通信。
  2. WebSocket 是一个完整应用层协议。
  3. Socket 更灵活,WebSocket 更易用。
  4. 两者都能做即时通讯



标签:yyds,HTTP,Socket,TCP,API,WebSocket,服务端
From: https://blog.51cto.com/u_11365839/6215428

相关文章

  • #yyds干货盘点#web端断点续传的思路
    讲断点续传前,咱们先讲讲大文件上传。大文件上传,可能会出现,上传时间过长,接口限制了文件大小。所以,大文件直接上传,也很不友好,一般采用分片上传的方式去上传。而blob提供了slice方法, file继承了blob自然也能使用slice去进行分片处理。处理流程:前端对大文件进行分片,分片名采用文件hash......
  • supersocket新的配置属性 "textEncoding"
    supersocket新的配置属性"textEncoding" 在SuperSocket1.6之前的版本,当你通过Session对象发送文本时,将文本信息转换成能够通过Socket传输的二进制数据的默认编码是UTF8。你可以通过设置Session的Charset属性来修改这个编码。现在在SuperSocket1.6中,你......
  • #yyds干货盘点# LeetCode程序员面试金典:最长有效括号
    题目:给你一个只包含'(' 和')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例1:输入:s="(()"输出:2解释:最长有效括号子串是"()"示例2:输入:s=")()())"输出:4解释:最长有效括号子串是"()()"示例3:输入:s=""输出:0代码实现:classSolution{publicint......
  • #yyds干货盘点# LeetCode面试题:删除排序链表中的重复元素
    1.简述:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3]2.代码实现:classSolution{publicListNodedeleteDuplicates(ListNodehead){......
  • Java WebSocket客户端
    https://www.cnblogs.com/SjhCode/p/WebSocketClient.html注意事项:1.@Scheduled(fixedDelay=5000)2.心跳检测3.导入依赖与导包<dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.......
  • ruoyi整合WebSocket
    https://www.cnblogs.com/SjhCode/p/WebSocket.html ruoyi整合WebSocket这里使用WebSocket目的:向前端推送实时消息,配合ActiveMQ接入三方使用的导入maven依赖 <!--WebSocket--><dependency><groupId>org.java-websocket</groupId><......
  • springboot框架快速整合websocket
    1、【pom.xml】<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>2、【MsgType.java】/***@authorJHL*2019-08-109:56*/publicenumM......
  • golang中通过原始socket实现tcp/udp的服务端和客户端示例
    这些天稍微空点,总结下golang中通过tcp/udp实现服务端客户端的编程实现,毕竟长久以来,如果要截单的http服务,我们直接使用net/http包实现服务,或者使用框架如gin/echo/beego等。以下就直接上代码,稍微看看都能懂起。1.TCP的实现serverpackagemainimport( "bufio" "fmt" "net"......
  • #yyds干货盘点#match 语句
    最简单的形式是将一个目标值与一个或多个字面值进行比较:defhttp_error(status):matchstatus:case400:return"Badrequest"case404:return"Notfound"case418:return"I'mateapot"......
  • #yyds干货盘点#python之 Lambda 表达式
    lambda 关键字用于创建小巧的匿名函数。lambda a, b: a+b 函数返回两个参数的和。Lambda函数可用于任何需要函数对象的地方。在语法上,匿名函数只能是单个表达式。在语义上,它只是常规函数定义的语法糖。与嵌套函数定义一样,lambda函数可以引用包含作用域中的变量:>>>defmake_......