websocket 为什么是按顺序执行的?

2020-07-10 12:38:30 +08:00
 wunonglin

我用的是 echo 里面的 gorilla websocket 示例

https://echo.labstack.com/cookbook/websocket

我原本的后台是 node 写的,node 上没事,但是为什么 go 这边是按顺序执行的而不是同时执行?

4782 次点击
所在节点    Go 编程语言
30 条回复
keepeye
2020-07-10 16:31:25 +08:00
@wunonglin 按顺序处理每一条消息
BingoXuan
2020-07-10 16:40:09 +08:00
@wunonglin
我觉得你不要开协程去做 readloop,直接执行 readloop 。如果 CreateFromUrl 方法中涉及 io 处理或者可以并发执行的话,可以开协程执行并通过 chan 取回结果。参考: http://litang.me/post/golang-channel/#%E5%A4%9A%E5%86%99%E4%B8%80%E8%AF%BB
wunonglin
2020-07-10 16:49:47 +08:00
@xylophone21 #18

https://i.loli.net/2020/07/10/CxVOXqPmNdyvZ5D.png

打印出了 goroutine 和随机 Sleep 值
wunonglin
2020-07-10 16:52:23 +08:00
@keepeye #21 是这理没错,可是我想要按顺序多个一起执行
Fitz
2020-07-10 19:48:37 +08:00
看到最后才看懂楼主的顺序执行是什么意思......同一个连接里收到的 event, 那可不就是顺序执行, 想要并发就在 for 循环里只要 ReadMessage 读到数据, 就启个 goroutine 去处理, 你 go c.readLoop(ctx)用错地方了.
joesonw
2020-07-10 22:40:25 +08:00
@Fitz 不要教坏人家了. 弄一个 channel 缓存, 然后按照想要的并发量起 goroutine.
wunonglin
2020-07-11 03:05:22 +08:00
@Fitz #25
@joesonw #26

的确是 read 到数据就开个 goroutine 就行了
hantsy
2020-07-11 09:21:26 +08:00
@wunonglin NestJS 不是应该用 Rxjs 多?
wunonglin
2020-07-11 11:00:57 +08:00
@hantsy 都有用,但是有些复杂的地方用 rxjs 也会嵌套太深
hantsy
2020-07-11 15:56:05 +08:00
@wunonglin 最近玩了一下 Nestjs,如果没有 Rxjs 支持, 我根本就没兴趣。

Nestjs 很多概念很源自 Angular,写 Angular 习惯了,async,await 和 promise 那一套实在用起来难受。Nestjs 内部几乎和 Angular 一致,都是 Rxjs 优先,但可惜,第三方集成很多还是基于 Promise 。

https://github.com/hantsy/nestjs-sample 我这个的 Sample 除了 LocalStrategy 用了 Promise (用 Observable,需要额外转换),其它地方都是 Rxjs 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/688833

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX