您是否曾在 Web 应用程序或移动应用程序中创建过具有聊天功能的应用程序?如果开发的是一个简单的应用程序,您可能会使用 Firebase 中的实时数据库。但您是否考虑过无需任何第三方就能建立实时连接?这种实时连接被称为 WebSocket。
什么是 WebSocket?
想象一下,您在一个聚会(互联网)上,用对讲机(HTTP)与房间另一端的朋友(服务器)通话。每当你想说什么的时候,你必须按下按钮(提出请求),说出你的信息,然后放开按钮,结束对话。然后,当朋友想要回复时,他们也要做同样的事情。这样做是可行的,但很不方便。
让我们把对讲机换成电话(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/
打开扩展后,会发现以下内容:
输入网址 ws://localhost:3000/test,作为 WebSocket 连接来测试连接。然后,按打开键打开 WebSocket 连接。连接建立后,日志会显示连接已就绪。
然后,在信息控制台输入任何内容,并按发送键。您每发送一条信息,服务器就会将信息发回控制台。
橙色消息是从控制台发送的消息,蓝色消息是控制台收到的消息。
无论何时想关闭连接,都可以按下关闭按钮。
结论
创建 WebSocket 可让您灵活地发送和接收数据,并完全控制通信逻辑。WebSocket 可以多次跳过打开-关闭连接并保持打开状态,因此效率很高,尤其适用于高频数据交换。
虽然 WebSocket 有很多优点,但从头开始实施 WebSocket 需要很多精力和处理连接的知识。这种方法需要你管理可扩展性,随着用户的增长,这可能会变得更具挑战性。
作者:Auriga Aristo
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/im/45585.html