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

socket,http和websocket的区别

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

收录于:152天前

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)

. . .

相关推荐

额外说明

天行集成

安装sw docker 安装,  compose 11800是外侧服务向skywaling投送数据的接口 12800是用来和web界面交互数据的接口 8080是ui界面商品 安装后,访问8080 怎么接入服务 下载 基于java的探针技术自动的上报指标数

额外说明

Java实现Redis的LRU缓存机制

LRU概述 最近使用的放在前面,最近没用的放在后面,如果来了一个新的数,此时内存满了,就需要把旧的数淘汰,那为了方便移动数据,肯定就得使用链表类似的数据结构,再加上要判断这条数据是不是最新的或者最旧的那么应该也要使用hashmap等key-value形式

额外说明

外壳函数

Shell 函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。 shell中函数的定义格式如下: [ function ] funname [()] {     action;     [return int;] } 说

额外说明

【Unity】【VR】如何让角色的Rig联动-Part1

【背景】 导入角色后,移动手部的骨架发现手臂等部分并不能跟着联动,这样就无法实现理想的VR身体。 VR能够追踪的基本就是手(控制器)和头部的位置和方向,全身的骨架必须能够跟随这三个点的移动而移动。 【解决方案】 要实现我们的目标,第一步就要对骨架进行相应

额外说明

mysql 索引使用与优化

前言 索引对有一定开发经验的同学来说并不陌生,合理使用索引,能大大提升sql查询的性能,可以这么讲,随着业务数据量的不断增长,优化系统的响应速度,很大程度上可以说就是集中在索引的优化上; mysql索引原理 在正式了解与学习mysql索引之前,先对mys

额外说明

C++删除注册表项及其所有子项的方法

#include <windows.h> #include <stdio.h> #include <strsafe.h> //************************************************************* //

额外说明

【C++11】多线程-----创建与使用线程

文章目录 前言 创建多线程及lambad表示式的讲解 使用 detach大坑以及一些其他函数 智能指针的传递 前言 本节课我们奖的是C++ 11多线程的创建与使用线程 我们多线程的意义在哪:充分利用CPU资源、简化编程模式、简化异步事件处理、使GUI更有

额外说明

【Java 进阶篇】Java ServletContext详解:获取MIME类型

MIME(Multipurpose Internet Mail Extensions)类型是一种标识文件类型的文本标签,通常用于指示浏览器如何处理Web服务器返回的文件。在Java Web应用程序中,ServletContext对象提供了一种方便的方法来

额外说明

14. Vuepress2.x 非根目录下的资源路径配置

方案一 推荐:VuePress 提供了内置的一个 helper $withBase(它被注入到了 Vue 的原型上),可以帮助你生成正确的路径。 <!-- 图片在 public/images/ 下 --> <img :src="$withBase('/i

额外说明

解决win系统出现找不到SCardDlg.dll文件的问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个SCardDlg.dll文件

ads via 小工具