在 Go 中实现 WebSocket(go语言websocket)

您是否曾在 Web 应用程序或移动应用程序中创建过具有聊天功能的应用程序?如果开发的是一个简单的应用程序,您可能会使用 Firebase 中的实时数据库。但您是否考虑过无需任何第三方就能建立实时连接?这种实时连接被称为 WebSocket。

什么是 WebSocket?

想象一下,您在一个聚会(互联网)上,用对讲机(HTTP)与房间另一端的朋友(服务器)通话。每当你想说什么的时候,你必须按下按钮(提出请求),说出你的信息,然后放开按钮,结束对话。然后,当朋友想要回复时,他们也要做同样的事情。这样做是可行的,但很不方便。

让我们把对讲机换成电话(WebSocket),您可以拨打一次电话,直到通话结束。您可以通话(发送数据)、监听(接收数据),甚至可以同时与对方通话(全双工)。有话要说时,不必重新连接。你们之间就像建立了一个开放的连接,毫不费力。

在 Go 中实现 WebSocket(go语言websocket)
WebSocket 进程

在 Go 中实现 WebSocket

首先,需要在项目中添加 WebSocket 模块。可以添加:

go get -u github.com/gorilla/websocket

因为我使用的是 GoFiber,所以您也可以使用这个模块来实现:

go get github.com/gofiber/websocket/v2

设置简单的应用程序,这段代码是基础。

package main

import (
    "github.com/gofiber/fiber/v2"
)

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello World!")
    })

    app.Listen(":3000")
}

要处理 WebSocket 连接,需要添加一个中间件,告诉用户路由可以升级为 WebSocket 连接。在这种情况下,我们使用路由 /test 作为 WebSocket 连接。

package main

import (
	"fmt"
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/websocket/v2"
	"log"
)

func setupRoutes(app *fiber.App) {
	// WebSocket route
	app.Use("/test", func(c *fiber.Ctx) error {
		// Check if it's a WebSocket connection
		if websocket.IsWebSocketUpgrade(c) {
			c.Locals("Allowed", true)
			return c.Next()
		}
		return fiber.ErrUpgradeRequired
	})
}

然后,需要一个处理程序来处理接收或发送的数据。函数 websocket.New 将负责处理。在下面的示例中,服务器会打印收到的每一条消息,并以相同的消息发送回去。

package main

import (
	"fmt"
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/websocket/v2"
	"log"
)

func setupRoutes(app *fiber.App) {
	// Middleware here

	app.Get("/test", websocket.New(func(c *websocket.Conn) {
		// WebSocket connection comes here
		for {
			mt, msg, err := c.ReadMessage()
			if err != nil {
				log.Println("read:", err)
				break
			}
			log.Printf("recv: %s", msg)

			err = c.WriteMessage(mt, []byte(fmt.Sprintf("Back: %s", msg)))
			if err != nil {
				log.Println("write:", err)
				break
			}
		}
	}))
}

最后,在 main 中调用 setupRoutes 并启动应用程序。

测试 WebSocket 连接

要测试 WebSocket 连接,可以使用 Postman 或其他工具。作为一个简单的选择,我将使用名为 “WebSocket Weasel “的 Firefox 扩展。

扩展地址:https://addons.mozilla.org/en-US/firefox/addon/websocket-weasel/

打开扩展后,会发现以下内容:

在 Go 中实现 WebSocket(go语言websocket)
WebSocket Weasel 页面

输入网址 ws://localhost:3000/test,作为 WebSocket 连接来测试连接。然后,按打开键打开 WebSocket 连接。连接建立后,日志会显示连接已就绪。

在 Go 中实现 WebSocket(go语言websocket)
WebSocket Weasel Log

然后,在信息控制台输入任何内容,并按发送键。您每发送一条信息,服务器就会将信息发回控制台。

在 Go 中实现 WebSocket(go语言websocket)
WebSocket Weasel 消息日志示例

橙色消息是从控制台发送的消息,蓝色消息是控制台收到的消息。

无论何时想关闭连接,都可以按下关闭按钮。

结论

创建 WebSocket 可让您灵活地发送和接收数据,并完全控制通信逻辑。WebSocket 可以多次跳过打开-关闭连接并保持打开状态,因此效率很高,尤其适用于高频数据交换。

虽然 WebSocket 有很多优点,但从头开始实施 WebSocket 需要很多精力和处理连接的知识。这种方法需要你管理可扩展性,随着用户的增长,这可能会变得更具挑战性。

作者:Auriga Aristo

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/im/45585.html

(0)

相关推荐

发表回复

登录后才能评论