当前位置: 首页 > news >正文

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 是一种新型的网络通信协议&#xff0c;可以在 Web 应用程序中实现双向通信。 WebSocket与HTTP协议的主要区别是&#xff1a; HTTP 和 WebSocket 协议的区别 HTTP 是单向的&#xff0c;而 WebSocket 是双向的。 在客户端和服务器之间的通信中&#xff0c;每个来自客…...

Nginx + fastCGI 实现动态网页部署

简介 本文章主要介绍下&#xff0c;如何通过Nginx fastCGI来部署动态网页。 CGI介绍 在介绍fastCGI之前先介绍下CGI是什么。CGI : Common Gateway Interface&#xff0c;公共网关接口。在物理层面上是一段程序&#xff0c;运行在服务器上&#xff0c;提供同客户端HTML页面的…...

精彩回顾 | Fortinet Accelerate 2023·中国区巡展厦门站

Fortinet Accelerate 2023中国区 5月16日&#xff0c;Fortinet Accelerate 2023中国区巡展来到魅力“鹭岛”——厦门&#xff0c;技术、产品和业务专家&#xff0c;携手亚马逊云科技、唯一网络等云、网、安合作伙伴&#xff0c;与交通、物流、金融等各行业典型代表客户&#x…...

ChatGPT 和对话式 AI 的未来:2023 年的进展和应用

人工智能(Artificial Intelligence)在过去一段时间以来以前所未有的速度快速发展。从自动化日常任务到重要提醒的设定,AI以各种方式渗透到我们的生活中。然而,在这个领域中迈出的最重要一步是ChatGPT。 ChatGPT被瑞银(UBS)评为“有史以来增长最快的消费者应用程序”,于…...

Nginx配置WebSocket(WS)和WebSocket Secure(WSS)的完整指南

&#x1f600;点点关注~ &#x1f600;点点关注~ &#x1f600;点点关注~ Nginx是一款广泛使用的高性能Web服务器和反向代理服务器。除了传统的HTTP和HTTPS协议支持外&#xff0c;Nginx还可以配置WebSocket&#xff08;WS&#xff09;和WebSocket Secure&#xff08;WSS&…...

链表--part 1--链表基础理论(概括)

文章目录 单链表双链表循环链表链表链表的定义删除节点增加节点 首先什么是链表&#xff0c;链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最…...

【V2G】电动汽车接入电网优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Excel中时间戳与标准日期格式的互相转换

背景 在excel中将13位毫秒级别的时间戳转换为标准的日期格式(yyyy-mm-dd hh:mm:ss.000)&#xff0c;使用如下模板 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 中&#xff0c;可以使用 ACL&#xff08;Access Control List&#xff09;控制用户对 topic 的访问权限。以下是一些基本示例&#xff1a; 创建一个名为 my-topic 的 topic 在命令行中执行以下命令创建一个名为 my-topic 的 topic&#xff1a; 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.固定公网地址 转载自内网穿透工具的文章&#xff1a;使用Nodejs搭建HTTP服务&#xff0c;并实现公网远程访问「内网穿透」 前言 Node.js…...

面试题之介绍自己测试的项目,担任的角色和做出的成果

在测试面试过程中&#xff0c;面试官想要了解一个同学对项目的掌握程度或一些例如沟通总结的软技能情况&#xff0c;该怎么考察呢&#xff1f; 一个具有代表性的题目来了&#xff1a;简单介绍一下自己测试的项目,担任的角色和做出的成果。 一、面试官角度 1、考察是否真正做过该…...

HTB靶机012-Valentine-WP

012-Valentine 靶机IP&#xff1a;10.10.10.79 Scan nmap端口扫描&#xff1a; ┌──(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

系统分为社区居民&#xff0c;管理员&#xff0c;县区工作员&#xff0c;社区工作员三个角色 县区工作员的主要功能&#xff1a; 1.对社区的工作人员进行添加&#xff0c;修改&#xff0c;删除&#xff0c;查询 2.疫情专栏的信息进行添加&#xff0c;修改&#xff0c;删除&…...

尝试探索水下目标检测,基于yolov5轻量级系列模型n/s/m开发构建海底生物检测系统

其实&#xff0c;水下目标检测相关的项目早在之前就已经做了几个了&#xff0c;但是没有系统性地对比过&#xff0c;感兴趣的话可以先看下之前的文章&#xff0c;如下&#xff1a; 《基于自建数据集【海底生物检测】使用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 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 更新&#xff08;内部版本号&#xff1a;22G5027e&#xff09;&#xff0c;本次更新距离上次发布隔了 17 天。 macOS Ventura 带来了台前调度、连续互通相机、Face…...

基于SpringBoot的财务管理系统的设计与实现

背景 财务管理系统能够通过互联网得到广泛的、全面的宣传&#xff0c;让尽可能多的员工了解和熟知财务管理系统的便捷高效&#xff0c;为管理者和员工提供了服务&#xff0c;节省人力、物力和时间&#xff0c;提高工作效率。 系统设计 为了更好的去理清本系统整体思路&#…...

使用OpenCV进行肺炎诊断检测

肺炎是一种由感染引起的严重呼吸道疾病&#xff0c;特别是在高危人群中&#xff0c;可能会出现危及生命的并发症。必须尽快诊断和治疗肺炎&#xff0c;以最大限度地提高患者康复的机会。 诊断过程并不容易&#xff0c;需要一些医学实验室工具和先进的医疗技能&#xff0c;但我们…...

北华大学第九届程序设计竞赛 题解

5.14和队友VP一场&#xff0c;第二次VP&#xff0c;状态明显比第一次好很多&#xff0c;总共A了7题&#xff0c;基本是能做出来的都做出来了&#xff0c;最后还剩下接近2小时的时间。。。。。 A "北华"有几何 思路&#xff1a;数图片中“北华”的数量&#xff0c;直…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...

React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)

React React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#xff0c;详细解释 用户: React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#x…...