golang 使用 websocket 发送数据给前端,总是会有丢包的情况发生

swqslwl:报错有时是 write:broken pipe.
有时是 An established connection was aborted by the software in your host machine.
有时不报错,wrieshark 抓包发现包全部发出去了,但前端就是会丢包。

上个帖子犯了个低级错误用了共享内存变量,现在改为用 channel 了,想知道是不是还是我后端代码的问题。

如果有提供很大帮助思路的,小弟可以给予一定的酬谢。

var dataTmp = make(chan []byte, 9999)
var t = make(chan []byte, 9999)

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

func init() {
	http.HandleFunc("/ws", wsHandler)
	go http.ListenAndServe("173.10.10.100:88", nil)
}

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 {
		select {
		case terror := <-t:
			fmt.Println("错误重新发送")
			fmt.Println(terror)
			err := wsConn.WriteMessage(websocket.TextMessage, terror)
			if err != nil {
				fmt.Println("再次发送", err.Error())
				t <- terror
				return
			}

		case tmp := <-dataTmp:
			err := wsConn.WriteMessage(websocket.TextMessage, tmp)
			if err != nil {
				fmt.Println("发送消息给客户端发生错误", err.Error())
				t <- tmp
				return
			}
		}
	}
}
使用 websocket 发送数据给前端过段时间后后端程序卡死

swqslwl:后端程序启动后 120 秒左右就卡死了,无论推送速度是快还是慢,总是会卡死。没有任何报错信息。 后端用的是 go,gin 框架中开了 2 个协程,1 个用来接受数据,1 个用来入库和用 websocket 发给前端。 接受数据和数据库写入都没问题。应该就是 websocket 推给前端时的问题。也检查了协程数,都是正常的。 var upgra…

golang 的模板为什么只能有一个数据根呢

iscraft:模板中要使用到的数据必须组合成为一个根 然后再渲染到页面 感觉好蛋疼啊在 php 里 随便加载一个 html 模板 当前可用的变量 在模板里随便写 都能渲染出来 真是方便啊 ???

golang 里面全局匿名变量的作用是啥?

iCD:看到过好几次别人的代码里面都有全局的匿名变量,比如这里: ... type cachedWriter struct { gin.ResponseWriter status int written bool store persistence.CacheStore expire time.Duration key string } var _ gin.…

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

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

又来招聘远程开发啦 Golang 区块链开发

tianlan:开源区块链项目寻求 golang 工程师长期合作,开发区块链功能,工具。 代码已经成熟,正在开发下一代系统,有高手一起开发。 项目地址: https://github.com/iotexproject/iotex-core 同时欢迎 star /follow 和提交 bug 。 技术要求:熟悉 Golang,熟练编写 Golang 测试用例,…