小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

socket,http和websocket的区别

数据通信与计算机网络,http,websocket,网络 额外说明

收录于:18天前

HTTP 协议是一种非持久性、单向网络协议。连接建立后,只允许浏览器向服务器发出请求,服务器才能返回相应的数据。当需要即时通讯时,浏览器以特定的时间间隔(比如1秒)通过轮询的方式向服务器发送Request请求,然后将最新的数据返回给浏览器。这种方法最明显的缺点是需要不断地发送请求,而且通常HTTP请求的头部很长。为了传输少量的数据,需要付出巨大的代价,这是非常不经济的,并且占用大量的带宽。

在WebSocket中,服务器和浏览器只需要通过HTTP协议进行握手动作,然后建立独立的TCP通信通道进行数据传输。

WebSocket与HTTP的关系

相同点:

  • 它们都是基于TCP的,都是可靠的传输协议。
  • 它们都是应用层协议。

不同之处:

  • WebSocket是一种双向通信协议,模拟Socket协议,可以双向发送或接收信息。 HTTP 是单向的。
  • WebSocket 需要握手才能建立连接。

WebSocket与Socket的关系

Socket实际上并不是一种协议,而是为了方便TCP或UDP的使用而抽象出来的一层。它是应用层和传输控制层之间的一组接口。

Socket是应用层和TCP/IP协议族之间进行通信的中间软件抽象层。它是一组接口。

在设计模式上,Socket实际上是一种门面模式,将复杂的TCP/IP协议族隐藏在Socket接口的背后。对于用户来说,一组简单的接口就够了,让Socket组织数据来满足指定的需求。协议。

两台主机通信时,必须通过Socket进行连接,Socket使用TCP/IP协议来建立TCP连接。

TCP连接更多地依赖于底层IP协议,而IP协议连接依赖于较低层,例如链路层。

WebSocket是一个典型的应用层协议。

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

在这里插入图片描述

JSR356的WebSocket规范使用javax.websocket.* API,普通Java对象(PO​​JO)可以使用@ServerEndpoint注释作为WebSocket服务器的端点。

 @ServerEndpoint("/echo")
 public class EchoEndpoint {
    
 
 @OnOpen
 public void onOpen(Session session) throws IOException {
    
 //以下代码省略...
 }
 
 @OnMessage
 public String onMessage(String message) {
    
 //以下代码省略...
 }
 
 @Message(maxMessageSize=6)
 public void receiveMessage(String s) {
    
 //以下代码省略...
 } 
 
 @OnError
 public void onError(Throwable t) {
    
 //以下代码省略...
 }
 
 @OnClose
 public void onClose(Session session, CloseReason reason) {
    
 //以下代码省略...
 } 
 
 }

上面的简单代码创建了一个 WebSocket 服务器。

@ServerEndpoint("/echo") 的 annotation 注释端点表示将 WebSocket 服务端运行在 ws://[Server 端 IP 或域名]:[Server 端口]/websockets/echo 的访问端点,客户端浏览器已经可以对 WebSocket 客户端 API 发起 HTTP 长连接了。

使用 ServerEndpoint 注解的类必须具有公共无参数构造函数。

用@onMessage注释的Java方法用于接收传入的WebSocket信息。该信息可以是文本格式或二进制格式。

当与此端点建立新连接时调用 OnOpen。参数提供有关连接另一端的更多详细信息。 Session表示两个WebSocket端点之间的会话连接的另一端,可以理解为类似于HTTPSession的概念。

OnClose 在连接终止时被调用。 closeReason 参数封装了更多详细信息,例如为什么关闭 WebSocket 连接。

网络中的套接字

所谓Socket API是指操作系统(也可能不是操作系统)提供的针对传输层(TCP/UDP)的抽象接口。目前的Socket API一般遵循BSD Socket规范(包括Windows)。这里调用规范是不准确的。该规范实际上是POSIX,但是BSD Unix中Socket的实现被广泛使用,因此它已经成为实际的规范。如果你想使用HTTP构建一个服务,那么你不需要关心Socket。如果你想构建一个基于TCP/IP的服务,那么Socket可能就是你会接触到的API。

在这里插入图片描述

深入浅出HTTP和WebSocket协议(2)

. . .

相关推荐

额外说明

leetcode刷题(7)二叉树(1)

哈喽大家好,这是我leetcode刷题的第七篇,这两天我将更新leetcode上关于二叉树方面的题目,如果大家对这方面感兴趣的话,欢迎大家持续关注,谢谢大家。 那么我们就进入今天的主题。 文章目录 1.二叉树的前序遍历 题目要求 示例 做题思路 代码实现

额外说明

Linux安装Oracle Database 19c RAC

Linux安装Oracle Database 19c RAC Oracle Real Application Clusters(RAC)允许客户跨多台服务器运行单个Oracle数据库,以便在访问共享存储的同时最大限度地提高可用性并实现水平可扩展性。连接到

额外说明

《天天数学》连载54:二月二十三日

2月23日 XXIII 数学格言 虽然这看起来像个悖论,但是一切精确科学都是受近似观念支配的。——贝特兰·罗素(Bertrand Russell) 数学习题 求正五角星一个角的度数。 古今评注 罗杰·彭罗斯(Roger Penrose)在1970年凭借拼

额外说明

YoloV7改进策略:SwiftFormer,全网首发,独家改进的高效加性注意力用于实时移动视觉应用的模型,重构YoloV7

文章目录 摘要 论文:《SwiftFormer:基于Transformer的高效加性注意力用于实时移动视觉应用的模型》 1、简介 2、相关研究 3、方法 3.1、注意力模块概述 3.2、高效的加性注意力 3.3、SwiftFormer 架构 4、实验 4

额外说明

MySQL不支持远程连接怎么办?

文章目录 一、宿主机与虚拟机相互通信 二、master虚拟机上访问MySQL 三、宿主机Navicat连接MySQL报错 四、解决无法远程连接MySQL的问题 一、宿主机与虚拟机相互通信 虚拟网络采用NAT模式 - VMnet8 开启了VMware Ne

额外说明

无心剑中译丁尼生《磨坊主千金》

The Miller’s Daughter 磨坊主千金 Alfred Tennyson 阿尔弗莱德·丁尼生 It is the miller’s daughter, And she is grown so dear, so dear, That I wo

额外说明

ASP.NET MVC 开放源码介绍

asp.net mvc ctp版本发布不到一个月时间,在社区出现了丛多的优秀开源项目,社区的活跃性非常高哦,前一段时间园子里也引发了MVC和WebForm的讨论,现在给各位推荐几个相关的优秀项目,这些项目是MVC的价值的最佳证明。 1、 Asp.net

额外说明

电脑系统缺少comct232.ocx如何解决的?

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个comct232.ocx文件进行安装(前提是找到适合的版本),

额外说明

创建多个wordpress_如何为WordPress中的每个类别创建单独的RSS Feed

创建多个WordPress 博主常常想知道如何为他们的类别制作单独的 RSS 提要。因为有时候你的用户访问你的网站只是为了设计类别,但你还有其他十个用户不感兴趣的类别。你如何为他们提供单独的 RSS Feed 。在本教程中,我们将向您展示如何做到这一点。

ads via 小工具