Gorilla WebSocket 是 Go 编程语言(Golang)的一个流行 WebSocket 库。它为在 Go 语言中处理 WebSocket 连接提供了一种简单高效的方法。
要开始在 Go 中使用 Gorilla WebSocket,你需要遵循以下步骤:
1. 安装 Gorilla WebSocket 软件包
使用 go get 安装 Gorilla WebSocket 软件包:
go get github.com/gorilla/websocket
2. 在 Go 代码中导入软件包
在 Go 代码中,导入 Gorilla WebSocket 软件包:
import "github.com/gorilla/websocket"
3. 创建 WebSocket 服务器
要创建 WebSocket 服务器,需要设置一个 HTTP 服务器并处理 WebSocket 连接。下面是一个简单的 server.go 示例:
package main
import (
"encoding/json"
"fmt"
"net/http"
"github.com/gorilla/websocket"
)
type WebSocketConnection struct {
*websocket.Conn
Username string
}
type SocketResponse struct {
From string
Type string
Message string
}
var (
connections = make([]*WebSocketConnection, 0)
upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
)
func UserConnected(currentConn WebSocketConnection, connections []*WebSocketConnection, msg string) {
connectedBypeResp, _ := json.Marshal(SocketResponse{
From: "",
Message: msg,
})
for _, v := range connections {
if currentConn.Conn != v.Conn {
if err := v.Conn.WriteMessage(1, connectedBypeResp); err != nil {
return
}
}
}
fmt.Println(msg)
fmt.Println("Current Connection: ", len(connections))
}
func initWs(w http.ResponseWriter, r *http.Request) {
username := r.URL.Query().Get("username")
conn, _ := upgrader.Upgrade(w, r, nil)
currentConn := WebSocketConnection{Conn: conn, Username: username}
connections = append(connections, ¤tConn)
connected := username + " connected....."
UserConnected(currentConn, connections, connected)
for {
// Read message from browser
msgType, msg, err := conn.ReadMessage()
if err != nil {
return
}
// Print the message to the console
fmt.Printf("%s %s: %s\n", conn.RemoteAddr(), username, string(msg))
resp := SocketResponse{
From: currentConn.Username,
Message: string(msg),
}
byteResp, _ := json.Marshal(resp)
for _, v := range connections {
if err = v.Conn.WriteMessage(msgType, byteResp); err != nil {
return
}
}
}
}
func initClient(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "client.html")
}
func main() {
http.HandleFunc("/echo", initWs)
http.HandleFunc("/", initClient)
http.ListenAndServe(":8080", nil)
}
在本例中,第一个 http.HandleFunc 将 HTTP 连接升级为 WebSocket 连接,并使用 /echo URL path 处理传入的 WebSocket 消息。第二个 http.HandleFunc 用于提供 client.html,这将是一个聊天界面,用户可以通过/URL path 聊天。
4. 创建 WebSocket 客户端
要创建 WebSocket 客户端,也可以使用 Gorilla WebSocket 库。下面是一个简单的 client.html 示例:
<div id="name"></div>
<input id="input" type="text" />
<button onclick="send()">Send</button>
<pre id="output"></pre>
<script>
var name = prompt('Enter your name please:') || "Annonymous"
var input = document.getElementById("input");
var output = document.getElementById("output");
var socket = new WebSocket("ws://localhost:8080/echo?username=" + name);
document.getElementById("name").innerHTML="Hello, " + name;
socket.onopen = function () {
output.innerHTML += "Status: Connected\n";
};
socket.onmessage = function (e) {
data = JSON.parse(e.data)
if (data.From == "") {
output.innerHTML += data.Message + "\n";
} else {
output.innerHTML += data.From + " : " + data.Message + "\n";
}
};
socket.onclose = function () {
socket.close
}
function send() {
socket.send(input.value);
input.value = "";
}
</script>
此示例连接到 WebSocket 服务器并发送和接收信息。
5. 运行应用程序
执行 go run server.go 命令后,进入浏览器并打开两个新标签页。在 URL 中输入localhost:8080,并在每个输入框中输入您的唯一别名。就可以开始聊天了:
请记住,请根据具体用例和错误处理要求自定义这些示例。Gorilla WebSocket 为处理 WebSocket 连接提供了各种选项和功能,使其成为 Go 语言中灵活而强大的 WebSocket 通信库。
作者:Tjiang Andrew
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。