关于流模式方法返回值的问题
请问下老师,这里server GetStream方法的返回值error到底拿来干嘛的?
如果res.send()方法返回值有错误,把err return 出去,到底在哪儿处理?还是不需要处理?
以后写这种流代码,都直接return nil ? 我测试了下,如果不加for循环阻塞,貌似就直接给客户端返回EOF了,他的作用就是这个吗?
还有个问题,在服务端这个方法for循环阻塞住了,客户端调用getStream() 还能立即拿到client和err返回值,做循环操作,这里为啥不阻塞呢?
对于之前只写过unary这种同步接口的有点难理解,
最后,在AllStream代码那儿,老师用了waitgroup去控制两个goroutine,最后使用wait()阻塞住,也是想办法不让该方法退出,我按我的理解,不应该是 写两个go协程后台运行,然后AllStream方法返回,服务端和go协程也不会挂,有点疑惑。
这里GetStream方法 server端只返回error ,而客户端得到的是包含client和error的两个返回值了,都不一样了。
正在回答
服务端和客户端要确保直接的本地goroutine不能退出,所以1. 上面的error返回后就会代表这次的连接断开了 2. for循环的目的是确保每次服务端send的数据都能通过recv接收到, 3. allstream使用wait的目的是为了防止主goroutine退出,因为一旦退出了链接就断开了
- 参与学习 489 人
- 解答问题 559 个
风口上的技术,薪资水平遥遥领先,现在学习正值红利期! 未来3-5年,Go语言势必成为企业高性能项目中不可替代的语言 从基础到项目实战再到重构,对转行人员友好,真正从入门到精通!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星