嗨,开发人员!在本教程中,我们将研究如何在我们自己的基于 Go 的程序中使用 WebSockets 来做一些很酷的实时事情。

在本教程结束时,我们应该已经涵盖了以下内容:

  • 什么是 WebSocket
  • 我们如何在 Go 中构建简单的 WebSocket 应用程序
gorilla/websocket

WebSockets - 它们是什么?

HTTP

WebSockets 是升级后的 HTTP 连接,在连接被客户端或服务器终止之前一直存在。正是通过这个 WebSocket 连接,我们可以执行双工通信,这是一种非常奇特的方式,可以说我们可以使用这个单一连接从我们的客户端与服务器进行通信。

WebSockets 的真正美妙之处在于它们总共使用了 1 个 TCP 连接,并且所有通信都是通过这个单一的长寿命 TCP 连接完成的。这大大减少了使用 WebSockets 构建实时应用程序所需的网络开销,因为不需要对 HTTP 端点进行持续轮询。

一个简单的例子

让我们从一个非常简单的 Go 程序开始,一旦我们可以运行它,我们就可以在它之上构建并开始构建一些简单的 WebSocket 端点。

go modules


go.mod
main.go

main.go


go run main.goHello World

一个简单的 HTTP 端点

Hello World8080


go run main.gohttp://localhost:8080//ws

升级 HTTP 连接

gorilla/websocket

定义我们的升级程序

websocker.Upgrader


检查传入来源

wsEndpointupgrader.CheckOriginCORS


目前,我们保持它非常简单,无论哪个主机尝试连接到我们的端点,都简单地返回 true。

升级我们的连接

upgrader.Upgrade()


持续聆听该连接

reader()upgrader.Upgrade


wsEndpoint


有了所有这些,我们现在应该能够像这样运行我们的新 WebSocket 服务器:


太棒了,一切似乎都奏效了!

回信给我们的客户

ws.WriteMessage()


Hi Client!

测试一切都与客户一起工作

ws://localhost:8080/ws


index.html
Hi From The Client!

我们现在已经实现了全双工通信!

Docker 化我们的应用程序

我在其他许多教程中都谈到了 Docker 的好处,但本质上,它允许我们定义应用程序成功运行所需的确切环境。这意味着您应该能够在 10 年内运行本教程,并且它应该仍然可以完美运行。


Dockerfileimagedocker buildcontainer


8080http://localhost:8080home page

结论

在本教程中,我们设法介绍了 WebSockets 的一些基础知识,以及如何在 Go 中构建一个简单的基于 WebSocket 的应用程序!

因此,希望您喜欢本教程并发现它很有用!我希望这突出了在您自己的 Go 应用程序中使用 WebSockets 的一些主要好处!