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

时间:2016-09-11 16:51:55

标签: go websocket

我是新来的,试图通过替换nodejs服务器来学习它。我的nodejs服务器有以下组件:

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

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

  3. 在节点上,让一般工作变得微不足道。我只是将生成的进程添加到我的“main”中的连接中,并在main中使用了回调。 websocket服务器模块和管理生成的进程通信的模块没有直接的交互,并且完全是通用的。

    然而,虽然我有一个websocket包和一个在go中运行良好的spawn包,但是我还没有找到一个很好的方法来为每个websocket连接创建一个生成的进程。我想过传递回调和内容,但这种方法似乎很苛刻。我认识到节点并且可能在编程中需要不同的策略,但我不能想到这样做的好“走”方式。我欢迎任何建议!

1 个答案:

答案 0 :(得分:1)

  1. 您描述了http协议的工作原理,意味着请求 - 响应。如果您需要的只是保持活力连接,那么您可能感觉良好。 Websocket本质上是异步的,消息不承担响应。例如,用例是服务器发送事件。
  2. Go服务器使用“即发即弃”策略。它接受连接,生成goroutine来处理它,忘记它并倾听新的。 Spawned goroutine升级到websocket的连接,然后在没有任何中介的情况下为客户端提供服务。