Golang 基于 Gorilla WebSocket 开发简单的聊天应用程序

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, &currentConn)

 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,并在每个输入框中输入您的唯一别名。就可以开始聊天了:

Golang 基于 Gorilla WebSocket 开发简单的聊天应用程序
第一个浏览器选项卡
Golang 基于 Gorilla WebSocket 开发简单的聊天应用程序
第二个浏览器选项卡

请记住,请根据具体用例和错误处理要求自定义这些示例。Gorilla WebSocket 为处理 WebSocket 连接提供了各种选项和功能,使其成为 Go 语言中灵活而强大的 WebSocket 通信库。

作者:Tjiang Andrew

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论