使用 websocket 发送数据给前端过段时间后后端程序卡死

swqslwl:后端程序启动后 120 秒左右就卡死了,无论推送速度是快还是慢,总是会卡死。没有任何报错信息。

后端用的是 go,gin 框架中开了 2 个协程,1 个用来接受数据,1 个用来入库和用 websocket 发给前端。

接受数据和数据库写入都没问题。应该就是 websocket 推给前端时的问题。也检查了协程数,都是正常的。

var upgrader = websocket.Upgrader{
	//	ReadBufferSize: 1024,
	//WriteBufferSize: 1024,
	// 允许所有的 CORS 跨域请求,正式环境可以关闭
	CheckOrigin: func(r *http.Request) bool {
		return true
	},
}
var dataTmp []byte

func init() {
	http.HandleFunc("/ws", wsHandler)
}

// 启动程序
func StartWebsocket(addrPort string) {
	http.ListenAndServe(addrPort, nil)
}

func(){
    ...
    go StartWebsocket("173.10.10.100:88")
    ...
}


func wsHandler(resp http.ResponseWriter, req *http.Request) {
	// 答客户端告知升级连接为 websocket
	wsSocket, err := upgrader.Upgrade(resp, req, nil)
	if err != nil {
		fmt.Println("升级为 websocket 失败", err.Error())
		return
	}
	go wsWriteLoop(wsSocket)
}

func wsWriteLoop(wsConn *websocket.Conn) {
	for {
		if len(dataTmp) != 0 {
			fmt.Println(time.Now())
			err := wsConn.WriteMessage(websocket.TextMessage, dataTmp)
			dataTmp = dataTmp[0:0]
			if err != nil {
				fmt.Println("发送消息给客户端发生错误", err.Error())
				wsConn.Close()
				return
			}
		}
	}
}

ghjacky:for 这样用合适吗,为啥不把 dataTmp 换成 channel 呢,for 配合 select 读 dataTmp 不好吗

使用 PDD 让我有一种被鄙视的感觉……

GeekSky:昨天在应用商店误点广告安装了拼夕夕,我想都装上了,我还从没用过,就进去看看吧。还是有收获的,新人一元购买了一把菜刀。然后被引导至领现金和零元砍的页面。这俩套路都一样的,都是刚开始给你 99%的额度,让你产生不想轻易放弃的心理,让你为了剩下 1%,去做任务和骚扰好友。让我震惊的是,邀请一位好友帮忙,只给一分钱!一分钱!一分钱!我骚扰了好友,好友…

如何让 websocket 连接走代理?

ob:请教下,目前有一台 centos 服务器,装了 ss 客户端,配置好 http_proxy 和 https_proxy,所有的 http 请求,目前可以访问被墙网站,现在的问题是,怎么让 websocket 也通过代理来请求被墙的服务地址?把 all_proxy 都设置上了,也是不管用。搜了很多资料没找到解决办法,特来请求帮助,谢谢。liumingha…

使用 Deno.bundle 打包并编译

iugo:目前 Deno 的命令行 bundle 仅支持 ESNEXT.https://dev.to/craigmorten/deno-bundle-for-server-side-rendered-react-11c2但是仍不支持类型文件, 导致导入到 TS 项目时, 丢失类型.

使用 Manjaro 自带的系统监视器遇到 BUG

imlm:由于新到的服务器配备了显示器,所以尝试在服务器安装 Manjaro KDE,调试之后使用正常,不过最近在跑任务时打开系统监视器时,发现在一百线程以及之后的线程显示错误( error)。谷歌搜索一圈貌似没有发现有别人遇到相同的问题?所以想问有没有什么好的办法解决这个问题。目的是想跑数据时能监控系统状态,当然 top,htop 这样的也可以,不过有些好…

SSD 使用 STAT 转 USB,无法读取。

w292614191:各位老哥。 我有一个 SATA 接口的 SSD,我买了一根 SATA 转 USB 连接线。 笔记本配置:两根 M.2,一块 2.5 的 1T 机械,系统在其中一根 M.2 。 链接到我笔记本无法正常使用,连接器灯亮,其他纯固态、机械、混合的笔记本花式操作都可以。 做过以下测试: 1.拔掉机械,固态,保留系统固态,插上,无法读取。 2.在…