首页 > 其他分享 >Websocket

Websocket

时间:2024-08-27 16:52:56浏览次数:10  
标签:WebSocket 请求 轮询 iframe 服务器 Websocket 客户端

一、基础知识

全双工、半双工和单工是通信系统中的三种数据传输模式,它们描述了数据在通信链路上的传输方式和方向。

  • 全双工:数据可以同时在两个方向传输,双方可以同时发送和接收数据。这是双向通信最先进的模式,允许同时进行的双向交流。
  • 半双工:数据可以在两个方向上传输,但不能同时进行。这意味着通信双方可以轮流发送和接收数据,但在某一时刻,只有一方能够发送数据。
  • 单工:数据只能在一个方向上传输,不能进行双向通信。这意味着一方只能发送数据,另一方只能接收数据,通信是单向的。

二、什么是Websocket?

一种实时通讯方案,允许服务器主动发送信息给客户端。

WebSocket协议是基于TCP的一种新的网络协议,是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术,它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。

三、为什么使用WebSocket?

在WebSocket出现之前,我们有一些其它的实时通讯方案,比较常用的有轮询,长轮询,流,还有基于Flash的交换数据的方式,接下来简单介绍下各种通信方式的特点。

① 轮询
这是最早的一种实现实时Web应用的方案;原理比较简单易懂,就是客户端以一定的时间间隔向服务器发送请求,以频繁请求的方式来保持客户端和服务器端的数据同步。但是问题也很明显:当客户端以固定频率向服务器端发送请求时,服务器端的数据可能并没有更新,这样会带来很多无谓的请求,浪费带宽,效率低下。

② 长轮询
长轮询是对定时轮询的改进和提高,目地是为了降低无效的网络传输。客户端像传统轮询一样从服务端请求数据,服务端会阻塞请求不会立刻返回,直到有数据或超时才返回给客户端,然后关闭连接,客户端处理完响应信息后再向服务器发送新的请求。当然,如果服务端的数据变更非常频繁的话,这种机制和定时轮询比较起来没有本质上的性能的提高。

③ iframe流
iframe流方式是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间创建一条长连接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript)来实时更新页面。

④ WebSocket
WebSocket是一种全新的协议,随着HTML5草案的不断完善,越来越多的现代浏览器开始全面支持WebSocket技术了,它将TCP的Socket(套接字)应用在了webpage上,从而使通信双方建立起一个保持在活动状态的连接通道。

参考资料

总:https://github.com/YunaiV/SpringBoot-Labs

websocket https://www.iocoder.cn/Spring-Boot/WebSocket/?github

标签:WebSocket,请求,轮询,iframe,服务器,Websocket,客户端
From: https://www.cnblogs.com/zhegemaw/p/18383061

相关文章

  • 【计算机网络】WebSocket协议
    目录一、WebSocket协议概述二、WebSocket协议基本特点三、WebSocket协议代码实现3.1 WebSocket协议python实现3.2 WebSocket协议JAVA实现3.3 WebSocket协议C++实现四、WebSocket协议发展趋势一、WebSocket协议概述        WebSocket协议是一种在单个TCP......
  • C# WebSocket Fleck 源码解读
    最近在维护公司旧项目,偶然发现使用Fleck实现的WebSocket主动推送功能,(由于前端页面关闭时WebSocketServer中执行了多次OnClose事件回调并且打印了大量的关闭日志,),后来我特地看了源码,这里做一些分享github: https://github.com/statianzo/Fleck 在源码中,作者在Samples项目中......
  • 聊聊JS中的WebSocket
    你好,我是沐爸,欢迎点赞、收藏和关注。个人知乎在JavaScript中,使用WebSocket非常简单直观。通过几行代码,你就可以轻松创建一个WebSocket连接,并监听来自服务器的消息。无论是开发实时聊天应用、在线游戏、实时数据分析平台,还是任何需要实时数据交互的场景,WebSocket都能为你提......
  • websocket连接
    https://blog.csdn.net/qq_70071513/article/details/133171580//暴露自定义websocket对象exportconstsocket={//后台请求路径url:"",//websocket对象websocket:null,//websocket状态websocketState:false,//重新连接次数reconnectNum:0,//......
  • PHP转Go系列 | ThinkPHP与Gin框架之打造基于WebSocket技术的消息推送中心
    大家好,我是码农先森。在早些年前客户端想要实时获取到最新消息,都是使用定时长轮询的方式,不断的从服务器上获取数据,这种粗暴的骚操作实属不雅。不过现如今我也还见有人还在一些场景下使用,比如在PC端扫描二维码,然后使用长轮询的方式从服务端获取最新的扫码信息,来判断用户是否已经......
  • 使用Django-Channels实现websocket通信+大模型对话
    前言最近一直在做这个大模型项目,我选了Django作为框架(现在很多大模型应用都用的FastAPI,不过我已经用习惯Django了)之前使用AspNetCore作为后端的时候,我先后尝试了BlazorServer,WebAPISSE(ServerSentEvent)等方案来实现大模型对话,目前好像SSE是用得比较多的,ChatGPT也......
  • WebSockets:原理、握手及代码实现
    1.WebSockets原理WebSockets是HTML5标准的一部分,旨在为Web应用提供全双工通信能力。与传统的HTTP请求不同,WebSockets连接一旦建立,就可以在客户端和服务器之间自由传输数据,而不再需要每次通信都重新建立连接。工作流程:建立连接:客户端通过HTTP协议发起WebSocket握......
  • 高性能的 C++ Web 开发框架 CPPCMS + WebSocket 模拟实现聊天与文件传输案例。
    1.项目结构2.config.json{"service":{"api":"http","port":8080,"ip":"0.0.0.0"},"http":{"script":"",&q......
  • WebSocket入门
    1介绍WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。HTTP协议和WebSocket协议对比:HTTP是短连接WebSocket是长连接HTTP通信是单向的,基于请求响......
  • 基于 go-zero 框架的项目中集成 WebSocket
    WebSocket集成指南本文档描述了如何在基于go-zero框架的项目中集成WebSocket。1.安装依赖首先,安装gorilla/websocket库:gogetgithub.com/gorilla/websocket2.项目结构在项目中添加以下文件和目录:└──pkg└──websocket└──websocket.go3......