golang websocket 发送消息莫名其妙断开的问题记录

概述

公司需要做个B/S架构的前端展示项目,当前以为是小case,但是在实现后端功能的时候,还是被坑了。

功能描述

项目需要实现的功能是调用外部第三方程序, 实时读取第三方程序的输出,发送到前端展示。因为懒得切换平台以及三方程序还未就绪,所以在Windows写了个BAT脚本做仿真,顺带调试程序。

问题描述

通过golang的os.exec执行三方程序(BAT脚本),通过管道读取程序输出的时候,发现给websocket发数据的时候,前端的链路会莫名其妙的提示close,也没有其他错误。

问题根源

经过一通瞎几把排查,最后将根源锁定在三方程序(BAT脚本)的输出中,发现输出中有中文字符,因为Windows系统的默认编码是GBK或者GB2312,但是golang的源码使用的都是UTF-8,导致往Websocket写GBK的中文数据([]byte)的时候出现异常,接着触发了后端代码发起了主动关闭动作。

注意:
如果直接在golang的代码里面直接写中文,通过Websocket发送是不会出错的,因为代码文件中文和代码文件的编码一致的,所以不会出现问题

解决方法

脚本内部通过chcp 65001将编码设置成UTF-8后,问题解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Django框架搭建Web应用

文章目录 简介安装Django创建一个Django项目创建一个Django应用编写视图配置URL运行开发服务器总结与拓展数据库集成管理后台表单处理模板引擎安全性 简介 Django 是一款基于 Python 语言的开源 Web 应用框架,采用了 MVC(模型-视图-控制器)设…

Kubernetes 之 Deployment

Kubernetes 之 Deployment Deployment 定义 Deployment 是 Kubernetes 中最常用资源之一,为 ReplicaSet 和 Pod 的创建提供了一种声明式的定义方法。Kubernetes 通过定义一个Deployment 控制器会创建一个新的 ReplicaSet 资源,通过 ReplicaSet 资源创建…

初学者的终极SEO内容指南

为您的网站吸引自然流量是搜索引擎优化 (SEO) 的关键部分,而实现这一目标的最佳方法之一是通过 SEO 内容。 SEO内容采用优化最佳实践来帮助你的网站被搜索引擎注意到。但问题是,你如何写出好的SEO内容?这就是我们今天…

vue3 websocket实现心跳

实现场景 该需求是运用websocket进行网页之间通讯,同时保证websocket在通讯期间保持激活的状态。 功能分析 1、在websocket报错时,重新苏醒。 2、在websocket自动关闭时,重新连接。 3、在通讯期间,整个websocket能接受消息&#…

Redis 主从复制、哨兵与集群

一、Redis 主从复制 1. 主从复制的介绍 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下&a…

现在的年轻人,怎么这么要脸?

从5月初到现在,在你的社交圈,一定看到过这样「灰头土脸」的照片吧!从朋友圈到微博、到QQ、到Soul,一夜之间,小柴的社交圈像是刮了一场「沙尘暴」。 简直是「丑」到了所有人的心坎里!所有人乐此不疲地把自己…

element plus校验日期格式为 type=“datetimerange“的方法

校验日期格式为数组格式时 :rules[{type:“arr”,…}] 失效 可以按照如下方法校验日期开始结束时间 rules: {planDate:[{type: "array",required: true,message: "请选择计划周期",trigger: "change",fields: {0: { type: "date", re…

java+Angular+Nginx+原生HTML+JS+CSS+Jquery融合B/S版电子病历系统云HIS系统源码

javaAngularNginx原生HTMLJSCSSJquery融合B/S版电子病历系统云HIS系统源码 Java版云HIS系统融合电子病历系统,是医学专用软件。医院通过电子病历以电子化方式记录患者就诊的信息,包括:首页、病程记录、检查检验结果、医嘱、手术记录、护理记录…

python 使用OCR 识别woff字体文件

做数据获取安**时发现请求返回的数据跟woff字体有关,这里写一个使用OCR识别方法, 1、重要部分的原理是解析woff文件,并将woff字体转为图片,并将字体编码与字体图片相对应,便于之后的数据解密解析。 2、使用的是muggl…

高性能推理框架漫谈

传统模型分布式推理框架 Tensorflow servingPytorch ServingTriton Server 大语言模型的推理框架 其中, VLLM 后端接入了Ray 框架, 作为调度请求的分发处理;除此之外,还包括Nvidia 最新推出的TensorRT-LLM, 增加了对…

【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)

最终效果 文章目录 最终效果前言素材模拟绳子钩子来回摆动发射回收钩子方法发射钩子回收钩子勾取物品随机生成物品其他源码完结 前言 在游戏发展史上,有些游戏以其简单而耐玩的特性,深深地烙印在了玩家的记忆中。《黄金矿工》就是其中之一,它…

数据管理.

1 概述 在移动互联网蓬勃发展的今天,移动应用给我们生活带来了极大的便利,这些便利的本质在于数据的互联互通。因此在应用的开发中数据存储占据了非常重要的位置,HarmonyOS应用开发也不例外。 本文将为您介绍HarmonyOS提供的数据管理能力之一首选项。 2 什么是首选项 首选…

剧本杀小程序开发:数字化发展下的行业优势

跟着好友一起约着去玩剧本杀,这已经成为了年轻人社交休闲的新方式。如今,数字化的应用为剧本杀行业带来了全新的生命力。剧本杀开始向线上发展,利用各种技术,让玩家在手机上体验到虚拟游戏带来的乐趣。 线上剧本杀摆脱了时间空间…

深入解析卷积神经网络(CNNs)

深入解析卷积神经网络(CNNs) 深入解析卷积神经网络(CNNs)一、CNNs 的基本原理1. 卷积操作2. 激活函数3. 池化层4. 全连接层 二、CNNs 的主要组成部分经典的 CNN 结构 三、CNNs 的实际应用1. 图像分类2. 目标检测3. 图像分割4. 图像…

【动态规划七】背包问题

目录 0/1背包问题 一、【模板】01背包 二、分割等和子集 三、目标和 四、最后一块石头的重量 II 完全背包问题 一、【模板】完全背包 二、零钱兑换 三、零钱兑换 II 四、完全平方数 二维费用的背包问题 一、一和零 二、盈利计划 似包非包 组合总和 卡特兰数 不…

AI大模型应用开发实践:4.基于 Chat Completions API 实现外部函数调用

基于 Chat Completions API 实现外部函数调用 2023年6月20日,OpenAI 官方在 Chat Completions API 原有的三种不同角色设定(System, Assistant, User)基础上,新增了 Function Calling 功能。 详见OpenAI Blog functions 是 Chat Completion API 中的可选参数,用于提供…

matlab使用教程(80)—修改图形对象的透明度

1.更改图像、填充或曲面的透明度 此示例说明如何修改图像、填充或曲面的透明度。 1.1坐标区框中所有对象的透明度 透明度值称为 alpha 值。使用 alpha 函数设置当前坐标区范围内所有图像、填充或曲面对象的透明度。指定一个介于 0(完全透明)和 1&#x…

15.回归问题

回归问题是机器学习领域中的核心问题之一,它旨在通过拟合数据点来建立数学模型,以预测因变量的值。回归问题不仅广泛应用于金融、医疗、工程等领域,也是数据分析和机器学习算法研究的重要基础。本文将深入探讨回归问题的基本概念、数学原理、…

软件设计师-上午题-计算题汇总

一、存储系统 - 存储容量计算(字节编址、位编址、芯片个数) 内存地址是16进制 内存地址编址的单位是Byte,1K1024B 1B 8 bit 1.计算存储单元个数 存储单元个数 末地址 - 首地址 1 eg. 按字节编址,地址从 A4000H 到 CBFFFH&…

ubuntu20.04 10分钟搭建无延迟大疆无人机多线程流媒体服务器

1.使用效果 无人机画面 2.服务器视频端口 3.使用教程 3.1.下载ubuntu对应软件包:系统要求ubuntu16以上 3.2修改端口(config.xml文件) 3.3启动服务 目录下输入:终端启动:./smart_rtmpd 后台启动:nohup ./…