您的当前位置:首页>全部文章>文章详情

【Go】使用Go语言创建WebSocket服务器和客户端

CrazyPanda发表于:2024-02-29 23:44:40浏览:350次TAG:

WebSocket 是一种新型的网络通信协议,可以在 Web 应用程序中实现双向通信。在这篇文章中,我们将介绍如何使用 Go 语言编写一个简单的 WebSocket 服务器。

首先,我们需要使用 Go 的 net/http 包创建一个 HTTP 服务器。在这个服务器中,我们将创建一个用于处理 WebSocket 连接的函数 handleWebSocket。在该函数中,我们将使用 gorilla/websocket 包来处理 WebSocket 连接。

goCopy code
package main

import (
    "log"
    "net/http"
    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

func main() {
    // 创建HTTP服务器
    http.HandleFunc("/ws", handleWebSocket)
    log.Println("Server started on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
    // 升级HTTP连接为WebSocket连接
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
    defer conn.Close()

    // 处理WebSocket连接
    for {
        // 读取消息
        messageType, p, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            return
        }
        log.Println("Received message:", string(p))

        // 发送消息
        err = conn.WriteMessage(messageType, []byte("Hello, world!"))
        if err != nil {
            log.Println(err)
            return
        }
    }
}

在这个示例中,我们使用 gorilla/websocket 包创建了一个 WebSocket 服务器。我们创建了一个 upgrader 实例,并将其用于升级 HTTP 连接为 WebSocket 连接。然后,我们在 handleWebSocket 函数中处理 WebSocket 连接。在该函数中,我们使用 conn.ReadMessage 方法读取从客户端发送的消息,并使用 conn.WriteMessage 方法将消息发送回客户端。

要测试这个 WebSocket 服务器,我们可以使用任何 WebSocket 客户端。例如,我们可以使用浏览器的 JavaScript WebSocket API。以下是一个简单的 HTML 文件,使用 JavaScript WebSocket API 连接到我们的 WebSocket 服务器:

htmlCopy code
<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Test</title>
</head>
<body>
    <script>
        var ws = new WebSocket("ws://localhost:8080/ws");
        ws.onopen = function() {
            console.log("WebSocket connection opened.");
        };
        ws.onmessage = function(event) {
            console.log("Received message: " + event.data);
        };
        ws.onclose = function() {
            console.log("WebSocket connection closed.");
        };
        ws.onerror = function(event) {
            console.log("WebSocket error: " + event.data);
        };
    </script>
</body>
</html>

在这个示例中,我们使用 JavaScript WebSocket API 创建了一个 WebSocket 连接,并打印连接状态和收到的消息。要测试这个 HTML 文件,我们可以使用任何支持 WebSocket 的浏览器来打开这个 HTML 文件,例如 Chrome 或 Firefox。当我们打开这个 HTML 文件时,它会自动连接到我们的 WebSocket 服务器,并显示连接状态和收到的消息。

除了使用浏览器的 JavaScript WebSocket API,我们还可以使用其他 WebSocket 客户端库,例如 Go 的 gorilla/websocket 包。以下是一个简单的 Go WebSocket 客户端示例:

goCopy code
package main

import (
    "log"
    "github.com/gorilla/websocket"
)

func main() {
    // 连接WebSocket服务器
    conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8080/ws", nil)
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    // 发送消息
    err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, world!"))
    if err != nil {
        log.Fatal(err)
    }

    // 读取消息
    messageType, p, err := conn.ReadMessage()
    if err != nil {
        log.Fatal(err)
    }
    log.Println("Received message:", string(p))
}

在这个示例中,我们使用 websocket.DefaultDialer.Dial 方法连接到我们的 WebSocket 服务器,并使用 conn.WriteMessage 方法发送消息。然后,我们使用 conn.ReadMessage 方法读取从服务器返回的响应消息。

这些示例展示了如何使用 Go 语言创建一个简单的 WebSocket 服务器和客户端。使用 WebSocket 协议可以实现高效、实时的双向通信,这在许多实时应用程序中非常有用,例如聊天应用程序、多人游戏和在线协作工具。


猜你喜欢

【Go】golang可以写桌面吗
本文操作环境:Windows10系统、go1.20版本、DELL G3电脑。Golang是一种强大且灵活的编程语言,它是由Google开发的,并在开源社区中得到了广泛的支持和应用。虽然Golang最初是作为一种服务器端语言设计的,用于处理并发请求和高性能的网络应用程序,但它也可以用于编写桌面应用程序。Golang的设计目标之一是提供简洁、高效的开发体验,并且具有垃圾回收机制和并发编程的优势。这些特性使得Golang成为一种理想的语言来开发桌面应用程序,尤其是对于需要高性能和并发处理的应用程序。虽
发表于:2024-06-06 浏览:278 TAG:
【Go】Golang标准库介绍(三)
1. image库 (常见图形格式的访问及生成)在 Go 语言的标准库中,image 包提供了对图像的基本操作和处理功能。这个包定义了 Image 接口和一些基本的图像类型,同时也包含了一些实现了该接口的具体类型,如 image.RGBA 和 image.Gray。关键概念和类型:1.&nbsp;Image&nbsp;接口:&nbsp;定义了图像的基本操作,包括获取像素值、设置像素值等。 2.&nbsp;RGBA&nbsp;类型:&nbsp;表示一个带有红、绿、蓝和透明度通道的图像。 3.&amp;nb
发表于:2024-03-04 浏览:368 TAG:
【Go】gotk3安装配置
转载:https://www.jianshu.com/p/44cf93054ca7gotk3是gtk+3的一个Go绑定,在windows下安装起来比较麻烦。本教程主要讲解gotk3的安装配置。测试环境:GoLand + msys2 + Win10安装MSYS2去官网https://www.msys2.org/下载msys2安装包,本教程使用的是64位版本。安装时请确保安装目录不包含空格,可以使用默认路径,我使用的目录为D:\msys64。 &nbsp; &nbsp;安装完成后修改pacman配置
发表于:2024-06-07 浏览:357 TAG:
【Go】Golang打包go项目部署到linux服务器正确方法
网上方法正确方法总结&nbsp;网上方法我们可以在终端中输入以下代码:set&nbsp;CGO_ENABLED=0 set&nbsp;GOOS=linux set&nbsp;GOARCH=amd64 go&nbsp;build&nbsp;-o&nbsp;main-linux&nbsp;main.go然后就会生成main-linux的二进制可执行文件,然后我们就可以将main-linux放到服务器中的任一目录中,然后我们就可以执行以下命令运行。&gt;&nbsp;chmod&nbsp;777&amp;nb
发表于:2024-08-06 浏览:283 TAG: #Golang
【Go】windows系统Go语言环境安装
1. Go语言安装包下载打开官网https://golang.google.cn/dl/,找到windows版本,点击下载,然后点击安装包安装,可自定义安装路径。2. GOROOT环境变量配置打开系统环境变量,新加GOROOT,路径就是Go安装根路径3. GOPATH环境变量添加在添加GOPATH环境变量之前,我们需要先新建一个工作区文件夹,这里笔者以GoProject命名。然后在该文件夹下分别创建src, pkg, bin三个文件夹,这三个文件夹作用如下:src: 存放源代码(go项目存放的位
发表于:2024-06-07 浏览:329 TAG:
【Go】利用Go语言实现高效的整除运算与余数计算
在编程中,整除运算和余数计算是常见的操作,特别在处理循环和数学运算时经常会用到。Go语言作为一种高效、简洁的编程语言,提供了丰富的内置函数和运算符,可以帮助我们实现高效的整除运算和余数计算。本文将介绍如何利用Go语言实现高效的整除运算和余数计算,并提供具体的代码示例。首先,我们来看一下Go语言中整除运算和余数计算的具体实现方式。在Go语言中,整除运算可以使用 &quot;/&quot; 运算符实现,余数计算可以使用 &quot;%&quot; 运算符实现。下面是一个简单的示例代码:package
发表于:2024-03-24 浏览:378 TAG:
【Go】Golang标准库介绍(二)
1. debug 库 (各种调试文件格式访问及调试功能在 Go 语言的标准库中,并没有一个名为 debug 的独立库。然而,Go 提供了一系列的工具和包,用于调试和性能分析。这些工具和包包括 debug/pprof、runtime/pprof、net/http/pprof 等,用于生成和分析性能剖析数据。相关的包和工具:1.&nbsp;runtime/pprof:&nbsp;提供了运行时性能分析的功能,可以用于查看&nbsp;CPU&nbsp;和内存的使用情况。它通过在代码中插入特殊的语句来收集
发表于:2024-03-03 浏览:279 TAG:
【Go】Goland常用快捷键介绍
文章目录前言一、文件操作相关快捷键二、代码格式化相关的快捷键三、查找和定位相关的快捷键四、编辑代码相关的快捷键四、编辑器相关的快捷键总结强烈推荐专栏集锦写在最后开源软件的影响力 前言在进行Go语言开发时,熟练使用快捷键是提高效率、加快编码速度的关键。Goland作为一款强大的集成开发环境(IDE),提供了丰富的快捷键功能,可以帮助开发者更加便捷地进行代码导航、编辑、调试等操作。通过掌握这些常用的快捷键,可以更加高效地编写和管理您的Go代码,节省大量的开发时间,提高工作效率。一、文件操作相关快捷键
发表于:2024-03-06 浏览:359 TAG:
【Go】Golang标准库介绍(五)
1. runtime库 ( 运行时接口)在 Go 语言的标准库中,runtime 包提供了与 Go 运行时系统交互的功能。这个包包括了一些控制和查询运行时状态的函数,如协程控制、垃圾回收、程序退出等。常用的函数:Gosched&nbsp;函数:&nbsp;让出处理器给其他&nbsp;goroutine&nbsp;执行,以便调度器能够有效地分配时间给不同的&nbsp;goroutine。 Go&nbsp;函数:&nbsp;用于启动一个新的&nbsp;goroutine。 NumCPU&nbsp;函
发表于:2024-03-05 浏览:301 TAG:
【Go】Go语言的发展历程和未来展望
Go语言的发展历程和未来展望Go语言(也称为Golang)是由Google开发的一种新兴的编程语言,自2007年首次亮相以来,逐渐成为了程序员们喜爱的语言之一。Go语言具有本地支持并发的内置特性、优秀的性能和简洁的语法,这些特点使其在云计算、网络编程等领域有着广泛的应用。发展历程Go语言的发展历程可以追溯到2007年1月,当时Robert Griesemer、Rob Pike和Ken Thompson开始着手开发这门语言。2009年11月,Go语言的第一个稳定版本1.0发布,随着社区的不断发展壮
发表于:2024-03-14 浏览:310 TAG: