go语言使用websocket发送一条消息A,持续接收返回的消息

在Go语言中实现一个WebSocket客户端,可以使用`gorilla/websocket`这个非常流行的库来处理WebSocket连接。下面是一个简单的示例,展示了如何创建一个WebSocket客户端,向服务器发送消息"A",并持续接收来自服务器的响应。

首先,确保你已经安装了`gorilla/websocket`包。如果没有安装,可以通过以下命令安装:

```sh

go get -u github.com/gorilla/websocket

```

然后,你可以使用下面的代码作为你的WebSocket客户端脚本:

它只发送一次消息"A",然后持续接收并打印服务器返回的消息,直到接收到特定数量的消息或遇到错误为止。

```go

package main

import (

"fmt"

"log"

"net/url"

"os"

"os/signal"

"time"

"github.com/gorilla/websocket"

)

func main() {

interrupt := make(chan os.Signal, 1)

signal.Notify(interrupt, os.Interrupt)

u := url.URL{Scheme: "ws", Host: "example.com:8080", Path: "/ws"} // 修改为你的WebSocket服务器地址

log.Printf("connecting to %s", u.String())

c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)

if err != nil {

log.Fatal("dial:", err)

}

defer c.Close()

// 发送一次消息"A"

err = c.WriteMessage(websocket.TextMessage, []byte("A"))

if err != nil {

log.Fatal("write:", err)

}

log.Println("sent: A")

// 设置接收消息的数量

n := 10 // 假设你想接收10条消息

// 开始接收消息

for i := 0; i < n; i++ {

_, message, err := c.ReadMessage()

if err != nil {

log.Println("read:", err)

break

}

log.Printf("recv: %s", message)

}

// 处理中断信号

select {

case <-interrupt:

log.Println("interrupt")

// 清洁关闭连接

err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))

if err != nil {

log.Println("write close:", err)

}

select {

case <-time.After(time.Second):

}

}

}

```

代码解释

  1. **连接到WebSocket服务器**:使用`websocket.DefaultDialer.Dial`方法连接到指定的WebSocket服务器。

  2. **发送一次消息**:在连接成功后,发送一次消息"A"。

  3. **接收多条消息**:设置一个循环,接收指定数量的消息(在这个例子中是10条)。每次接收到消息后,打印消息内容。

  4. **处理中断信号**:监听操作系统的中断信号(如Ctrl+C),以便优雅地关闭WebSocket连接。

运行说明

  • 将`example.com:8080`替换为你的WebSocket服务器的实际地址。

  • 调整变量`n`的值,以指定你希望接收的消息数量。

运行此程序后,它将发送一次消息"A",然后持续接收并打印服务器返回的消息,直到接收到指定数量的消息或遇到错误。如果需要停止程序,可以按Ctrl+C来触发中断处理逻辑。

相关推荐
笨蛋不要掉眼泪2 小时前
deepseek封装结合websocket实现与ai对话
人工智能·websocket·网络协议
数据知道9 小时前
Go语言设计模式:工厂模式详解
开发语言·设计模式·golang·go语言·工厂模式
人邮异步社区14 小时前
推荐几本学习计算机语言的书
java·c语言·c++·python·学习·golang
千码君20161 天前
Go语言:解决 “package xxx is not in std”的思路
开发语言·后端·golang
Ypuyu1 天前
【GoLang】【框架学习】【GORM】4. 使用 BeforeUpdate hook 操作时,出现反射报错
开发语言·学习·golang
脚踏实地的大梦想家1 天前
【Go】P17 Go语言并发编程核心:深入理解 Goroutine (从入门到实战)
java·开发语言·golang
洲覆1 天前
go-mysql-transfer 伪装从库实现 MySQL 到 Redis 数据同步(完整配置)
数据库·redis·mysql·golang
无知就要求知1 天前
golang封装可扩展的crontab
开发语言·后端·golang
雨中散步撒哈拉1 天前
14、做中学 | 初二上期 Golang集合Map
开发语言·后端·golang
paopaokaka_luck2 天前
基于SpringBoot+Vue的助农扶贫平台(AI问答、WebSocket实时聊天、快递物流API、协同过滤算法、Echarts图形化分析、分享链接到微博)
java·vue.js·spring boot·后端·websocket·spring