眼前多少难甘事,自古男儿当自强。这篇文章主要讲述如何在 Go 中创建 WebSocket 应用程序相关的知识,希望能为你提供帮助。
【如何在 Go 中创建 WebSocket 应用程序】
如何在 Go 中创建 WebSocket 应用程序上一篇文章我们先介绍了什么是 WebSockets 协议。本篇文章将来介绍如何利用 Go 来实现一个要基于 net/http 库编写一个简单的 WebSocket 响应服务器,您需要:
WebSockets 无需客户端事先请求即可从服务器传输数据,允许来回传递消息并保持连接打开,直到客户端或服务器终止它。因此,可以在客户端和服务器之间进行双向实时数据传输。 WebSocket 通信通常通过 TCP 端口号 443 完成。WebSocket 协议规范定义了两种 URI 方案:
建立 HTTP 服务器WebSockets 建立在 HTTP 之上,所以首先,我们将设置一个基本的 HTTP 服务器,它可以接受客户端连接并提供消息。将以下代码添加到您的 server.go 文件中:
package main
import (
"fmt"
"net/http"
)
func main()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request)
fmt.Fprintf(w, "Welcome to the server!\\n")
)
http.ListenAndServe(":8080", nil)
通过运行 ??go run server.go?
?启动服务器。当您访问 ??localhost:8080?
? 时,您应该会看到以下输出:
Welcome to the server!
发起握手由于开销较小,WebSocket 可以在 Web 服务器和 Web 浏览器或客户端应用程序之间实现实时通信和快速数据传输。 WebSocket 通信发起一个握手,它使用 HTTP Upgrade() 标头从 HTTP 协议更改为 WebSocket 协议。要建立 WebSocket 连接,需要在客户端和服务器之间进行一次握手。握手使用 Upgrade() 方法将 HTTP 服务器连接升级到 WebSocket 协议。一旦服务器停止,我们还将使用 defer 关闭连接。现在,我们修改 ??server.go?
? 文件,建立一个 WebSocket 握手:
?gorilla/websocket?
?库:$ go get github.com/gorilla/websocket
var upgrader = websocket.Upgrader
ReadBufferSize:1024,
WriteBufferSize: 1024,
?server.go?
? 代码:package main
import (
"fmt"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader
ReadBufferSize:1024,
WriteBufferSize: 1024,
func main()
http.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Request)
conn, _ := upgrader.Upgrade(w, r, nil) // error ignored for sake of simplicity
for
// Read message from browser
msgType, msg, err := conn.ReadMessage()
if err != nil
return
// Print the message to the console
fmt.Printf("%s sent: %s\\n", conn.RemoteAddr(), string(msg))
// Write message back to browser
if err = conn.WriteMessage(msgType, msg);
err != nil
return
)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request)
http.ServeFile(w, r, "websockets.html")
)
http.ListenAndServe(":8080", nil)
?websockets.html?
? 文件,写入如下代码:
<
input id="input" type="text" />
<
button onclick="send()">
Send
推荐阅读
- #yyds干货盘点# js学习笔记四十四遍历对象的属性和值
- FPS游戏(实现人物高跳无后座力)
- 储能行业在中国前景如何(数字孪生智慧能源有哪些帮助?)
- 读书笔记《think in Java》①
- Win10中如何枚举所有SSDT
- Django REST Framework
- Bootstrap 常用框架的使用
- Flask与axios 前后端交互
- 操作系统开发(BIOS/MBR 编写开机引导)