golang-websocket
WebSocket 是一种新型的网络通信协议,可以在 Web 应用程序中实现双向通信。
WebSocket与HTTP协议的主要区别是:
HTTP 和 WebSocket 协议的区别 HTTP 是单向的,而 WebSocket 是双向的。
在客户端和服务器之间的通信中,每个来自客户端的 HTTP 请求都会建立一个新的连接,并在从服务器收到响应后关闭,而WebSocket连接只建立一次,并在服务器或客户端终止连接之前重复使用。
HTTP 的空闲连接的超时时间为 60 秒。可用于响应时间非常短的调用。
WebSocket 空闲连接的超时时间为 3600 秒(1 小时),可应用于响应时间长于 60 秒的调用,最大连接数为 250。
WebSocket服务器
首先,创建一个 HTTP 服务器。在这个服务器中,创建一个用于处理 WebSocket 连接的函数 handleWebSocket。
其实就是开启一个http服务器。
func HandleWebSocket(w http.ResponseWriter, r *http.Request) {}
func main() {http.HandleFunc("/ws", HandleWebSocket)http.ListenAndServe(":8080", nil)
}
然后在该函数中,使用 gorilla/websocket 包来处理 WebSocket 连接。
1.建立upgrade变量。
websocket协议建立连接的握手过程就是http协议的头部加入了upgrade字段(upgrade:websocket)。
首先要导入"github.com/gorilla/websocket"包
var upgrade = websocket.Upgrader{ReadBufferSize: 1024,WriteBufferSize: 1024,CheckOrigin: func(r *http.Request) bool {return true},
}
2.升级http连接成websocket连接,处理websocket连接
将http连接头部加入upgrade字段,成为websocket协议。
func HandleHome(w http.ResponseWriter, r *http.Request) {//升级成websocketconn, err := upgrade.Upgrade(w, r, nil)if err != nil {log.Println(err)}//websocket读写逻辑for {messageType, p, err := conn.ReadMessage()if err != nil {log.Println(err)return}log.Println("receive:", string(p))conn.WriteMessage(messageType, []byte("hello, i am server"))}
}
WebSocket客户端
客户端主要是用来测试websocket服务器是否正确工作的,下面提供两种websocket服务器。
html+js实现
<!DOCTYPE html>
<html>
<head><title>WebSocket Test</title>
</head>
<body><script>var ws = new WebSocket("ws://localhost:8080/ws");ws.onopen = function() {console.log("WebSocket connection opened.");ws.send("Hi From the Client!")};ws.onmessage = function(event) {console.log("Received message: " + event.data);};ws.onclose = function() {console.log("WebSocket connection closed.");};ws.onerror = function(event) {console.log("WebSocket error: " + event.data);};</script>
</body>
</html>
利用golang websocket包实现
func WebSocketClient() {conn, _, err := websocket.DefaultDialer.Dial("ws://127.0.0.1:8080/ws", nil)if err != nil {panic(err)}defer conn.Close()for {time.Sleep(time.Second)conn.WriteMessage(websocket.TextMessage, []byte("hi i am client"))_, p, err := conn.ReadMessage()if err != nil {log.Println(err)}println("client recv:", string(p))}}
相关文章:
golang-websocket
WebSocket 是一种新型的网络通信协议,可以在 Web 应用程序中实现双向通信。 WebSocket与HTTP协议的主要区别是: HTTP 和 WebSocket 协议的区别 HTTP 是单向的,而 WebSocket 是双向的。 在客户端和服务器之间的通信中,每个来自客…...
Nginx + fastCGI 实现动态网页部署
简介 本文章主要介绍下,如何通过Nginx fastCGI来部署动态网页。 CGI介绍 在介绍fastCGI之前先介绍下CGI是什么。CGI : Common Gateway Interface,公共网关接口。在物理层面上是一段程序,运行在服务器上,提供同客户端HTML页面的…...
精彩回顾 | Fortinet Accelerate 2023·中国区巡展厦门站
Fortinet Accelerate 2023中国区 5月16日,Fortinet Accelerate 2023中国区巡展来到魅力“鹭岛”——厦门,技术、产品和业务专家,携手亚马逊云科技、唯一网络等云、网、安合作伙伴,与交通、物流、金融等各行业典型代表客户&#x…...
ChatGPT 和对话式 AI 的未来:2023 年的进展和应用
人工智能(Artificial Intelligence)在过去一段时间以来以前所未有的速度快速发展。从自动化日常任务到重要提醒的设定,AI以各种方式渗透到我们的生活中。然而,在这个领域中迈出的最重要一步是ChatGPT。 ChatGPT被瑞银(UBS)评为“有史以来增长最快的消费者应用程序”,于…...
Nginx配置WebSocket(WS)和WebSocket Secure(WSS)的完整指南
😀点点关注~ 😀点点关注~ 😀点点关注~ Nginx是一款广泛使用的高性能Web服务器和反向代理服务器。除了传统的HTTP和HTTPS协议支持外,Nginx还可以配置WebSocket(WS)和WebSocket Secure(WSS&…...
链表--part 1--链表基础理论(概括)
文章目录 单链表双链表循环链表链表链表的定义删除节点增加节点 首先什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最…...
【V2G】电动汽车接入电网优化调度研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Excel中时间戳与标准日期格式的互相转换
背景 在excel中将13位毫秒级别的时间戳转换为标准的日期格式(yyyy-mm-dd hh:mm:ss.000),使用如下模板 TEXT(<source_cell>/1000/8640070*36519,"yyyy-mm-dd hh:mm:ss.000") 在excel中将10位秒级别的时间戳转换为标准的日期格式(yyyy-mm-dd hh:mm:ss…...
【Kafka集群】Kafka针对用户做ACL权限控制
在 Kafka 3.3.1 中,可以使用 ACL(Access Control List)控制用户对 topic 的访问权限。以下是一些基本示例: 创建一个名为 my-topic 的 topic 在命令行中执行以下命令创建一个名为 my-topic 的 topic: kafka-topics.…...
国内外数据安全治理框架介绍与分析
本文将介绍和分析:微软 DGPC框架,Gartner 数据安全治理框架 DSG,数据安全能力成熟度模型 DSMM 数据治理与数据安全治理系列文章 https://luozhonghua.blog.csdn.net/article/details/130417106 数据安全治理流程设计_luozhonghua2000的博客-CSDN博客 数据治理解决之道探讨…...
【Nodejs】使用Nodejs搭建HTTP服务,并实现公网远程访问
文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 转载自内网穿透工具的文章:使用Nodejs搭建HTTP服务,并实现公网远程访问「内网穿透」 前言 Node.js…...
面试题之介绍自己测试的项目,担任的角色和做出的成果
在测试面试过程中,面试官想要了解一个同学对项目的掌握程度或一些例如沟通总结的软技能情况,该怎么考察呢? 一个具有代表性的题目来了:简单介绍一下自己测试的项目,担任的角色和做出的成果。 一、面试官角度 1、考察是否真正做过该…...
HTB靶机012-Valentine-WP
012-Valentine 靶机IP:10.10.10.79 Scan nmap端口扫描: ┌──(xavier㉿kali)-[~] └─$ sudo nmap -sSV -T4 10.10.10.79 -F Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-29 00:47 CST Nmap scan report for 10.10.10.79 Host is up (0.30s…...
微信小程序nodejs+vue社区居民健康服务系统uniapp
系统分为社区居民,管理员,县区工作员,社区工作员三个角色 县区工作员的主要功能: 1.对社区的工作人员进行添加,修改,删除,查询 2.疫情专栏的信息进行添加,修改,删除&…...
尝试探索水下目标检测,基于yolov5轻量级系列模型n/s/m开发构建海底生物检测系统
其实,水下目标检测相关的项目早在之前就已经做了几个了,但是没有系统性地对比过,感兴趣的话可以先看下之前的文章,如下: 《基于自建数据集【海底生物检测】使用YOLOv5-v6.1/2版本构建目标检测模型超详细教程》 《基于…...
大数据Doris(二十四):Doris数据Insert Into导入方式介绍
文章目录 Doris数据Insert Into导入方式介绍 一、语法及参数 二、案例 三、注意事项 1、关于插入数据量 2、关于insert操作返回结果 3、关于导入任务超时 4、关于Session变量 5、关于数据导入错误 Doris数据Insert Into导入方式介绍 Doris 提供多种数据导入方案&…...
macOS Ventura 13.5beta (22G5027e)发布
系统介绍 黑果魏叔 5 月 20 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 更新(内部版本号:22G5027e),本次更新距离上次发布隔了 17 天。 macOS Ventura 带来了台前调度、连续互通相机、Face…...
基于SpringBoot的财务管理系统的设计与实现
背景 财务管理系统能够通过互联网得到广泛的、全面的宣传,让尽可能多的员工了解和熟知财务管理系统的便捷高效,为管理者和员工提供了服务,节省人力、物力和时间,提高工作效率。 系统设计 为了更好的去理清本系统整体思路&#…...
使用OpenCV进行肺炎诊断检测
肺炎是一种由感染引起的严重呼吸道疾病,特别是在高危人群中,可能会出现危及生命的并发症。必须尽快诊断和治疗肺炎,以最大限度地提高患者康复的机会。 诊断过程并不容易,需要一些医学实验室工具和先进的医疗技能,但我们…...
北华大学第九届程序设计竞赛 题解
5.14和队友VP一场,第二次VP,状态明显比第一次好很多,总共A了7题,基本是能做出来的都做出来了,最后还剩下接近2小时的时间。。。。。 A "北华"有几何 思路:数图片中“北华”的数量,直…...
大模型学习-python学习Day5
一.函数函数是带名字的代码块,用于完成具体的任务,可重复使用,当需要在程序中多次执行同一项任务时,无须反复编写完成该任务的代码,只需要调用执行该任务的函数,让python运行其中的代码即可。python中的函数…...
使用钉钉远程操作你的claude code寺
先回顾:三次握手(建立连接)核心流程(实际版) 为了让挥手流程衔接更顺畅,咱们先快速回顾三次握手的实际核心,避免上下文脱节: 第一步(客户端→服务器)…...
深入S7协议栈:从TPKT、COTP到PDU,手把手用Wireshark抓包分析Java通信全过程
深入S7协议栈:从TPKT、COTP到PDU,手把手用Wireshark抓包分析Java通信全过程 工业自动化领域,西门子S7协议作为PLC通信的事实标准,其底层协议栈的复杂性常常让开发者望而生畏。当基于Java的iot-communication库与西门子PLC通信出现…...
LabVIEW开发的TestStand多工位并行测试框架:支持独立测试、序列编辑与参数编辑功能...
labview 编写的类teststand多工位并行测试框架,带单独的测试和序列编辑,参数编辑功能,具体的见图片,功能正常,多工位测试,带源码最近在捣鼓一个用LabVIEW编写的类TestStand多工位并行测试框架,感…...
SITS2026首批通过架构案例全披露(含字节/阿里/平安内部PPT精要),仅剩最后23个企业可申请架构对标评估
第一章:SITS2026深度解析:AI原生应用架构设计 2026奇点智能技术大会(https://ml-summit.org) AI原生应用已不再满足于将模型“封装后调用”,而是要求从基础设施、服务编排、状态管理到用户交互的全栈重构。SITS2026(Singularity …...
响应式设计进阶技巧
响应式设计进阶技巧 1. 前言 在当今多设备时代,响应式设计已成为前端开发的标准实践。本文将深入探讨响应式设计的高级技巧,帮助你创建更加灵活、高效的响应式网站。 2. 响应式设计基础 2.1 核心概念 响应式设计的核心是根据设备屏幕尺寸和方向自动调整布…...
LaTeX公式一键转换Word:告别复制粘贴的终极解决方案
LaTeX公式一键转换Word:告别复制粘贴的终极解决方案 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 还在为学术论文中的公式迁移而烦…...
如何突破Stable Diffusion生成瓶颈?ComfyUI_TensorRT实战解密
如何突破Stable Diffusion生成瓶颈?ComfyUI_TensorRT实战解密 【免费下载链接】ComfyUI_TensorRT 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_TensorRT 你是否曾在等待Stable Diffusion图像生成时感到焦虑?每次点击"生成"按…...
手把手教你为Windows10的ROS环境创建‘一键启动’快捷方式(含VS2022路径配置详解)
Windows高效开发:ROS环境一键启动方案深度解析 在Windows系统上搭建ROS开发环境后,每次启动都需要手动配置环境变量、加载开发工具链,这种重复性操作不仅浪费时间,还容易因输入错误导致环境异常。本文将彻底解决这一痛点ÿ…...
RoCE v2实战指南:如何用普通以太网卡搭建无损RDMA网络(附PFC/ECN配置模板)
RoCE v2企业级部署实战:从零构建无损以太网RDMA网络 在数据中心性能敏感型应用中,传统TCP/IP协议栈的瓶颈日益凸显。微软Azure实测数据显示,采用RoCE v2的存储集群相比传统TCP/IP方案,延迟降低83%的同时CPU利用率下降65%。本文将深…...
