gpt4 book ai didi

go - golang中处理websocket通信的设计实践

转载 作者:数据小太阳 更新时间:2023-10-29 03:14:49 26 4
gpt4 key购买 nike

我是新手,正在尝试通过更换 nodejs 服务器来学习它。我的 nodejs 服务器具有以下组件:

  1. 它收到来自客户端的 websocket 消息。客户端将为消息提供唯一 ID 和 key 。服务器将根据 key 处理消息(很像 REST 接口(interface)),并使用唯一 ID 将消息返回给客户端,以便客户端知道服务器正在响应的消息。

  2. 对于某些消息,服务器会生成一个外部进程(每个连接一个)。然后,服务器将充当生成进程的“客户端”,发送具有唯一 ID 的 JSON 消息并接收回数据。此实例中的服务器充当派生进程和客户端之间的中介。

在 node 上让它正常工作是微不足道的。我只是将生成的进程添加到我的“主”中的连接并在主中使用了回调。 websocket 服务器模块和管理衍生进程通信的模块没有直接交互,并且是完全通用的。

然而,虽然我有一个 websocket 包和一个在 go 中运行良好的 spawn 包,但我一直无法找到一种好方法来为每个 websocket 连接创建一个 spawned 进程。我想过传递回调和初始化,但这种方法似乎很老套。我认识到 node 和 go 可能需要不同的编程策略,但我想不出一个好的“go”方式来做到这一点。我欢迎任何建议!

最佳答案

  1. 您描述了 http 协议(protocol)的工作原理,即请求-响应。如果这就是你所需要的,你可能会觉得只需要保持连接就可以了。 Websocket 本质上是异步的,消息不假设响应。例如,用例是服务器发送事件。
  2. 在 Go 中,服务器使用即发即弃策略。它接受连接,产生 goroutine 来处理它,忘记它并监听一个新的。生成的 goroutine 升级到 websocket 的连接,然后在没有任何中介的情况下为客户端服务。

关于go - golang中处理websocket通信的设计实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39438422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com