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后,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜晓码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值