当前位置: 首页 > news >正文

websocket的客户端(发送接收json的消息)

1.导包

            "github.com/gorilla/websocket"

2.结构体

type Student struct{

        Name string `json:"type"`

        Gender string `json:"call"`

}

说明:传入传出的json中的键名要一致

3.连接服务器

        client,_,err :=websocket.DefaultDialer.Dial("服务器地址",nil)

4.解码json并发送消息

        msg := Student{

        Name : "cc",

        Gender:"男",

}

    err = client.WriteJSON(websocket)

5.读取消息

for{

var student Student

    err :=client.ReadJSON(&student)

    if err != nil{

        log.Fatal("读取失败,",err)

    }

    log.Println("收到; ",student)

}

其实可以使用go协程来完成,只是步骤我没有写下来

package main

import (

    "sync"

    "log"

    "github.com/gorilla/websocket"

)

type Student struct{

    Name string `json:"type"`

    Gender string `json:"call"`

}

func main() {

    //连接WebSocket服务器

    // conn, _, err := websocket.DefaultDialer.Dial("ws://175.27.250.177:8090/rtc/echo", 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))

    // log.Println(messageType)

    // 连接websocket的服务器

    var wg sync.WaitGroup

    client,_,err := websocket.DefaultDialer.Dial("wss://chat.ruzhila.cn/rtc/echo",nil)

    if err !=nil{

        log.Fatal("连接失败:", err)

    }

    defer client.Close()

    // 告诉主线程要等一个新的go协程完成

    wg.Add(1)

    go func ()  {

        // 当这个go协程结束后,告诉主线程我结束了

        defer wg.Done()

    // 读取消息

        receive(client)

    }()

    // 解码为JSON,并发送

    send(client)

    // 等待所有go协程完成

    wg.Wait()  

}

func receive(client *websocket.Conn){

    var student Student

    err :=client.ReadJSON(&student)

    if err != nil{

        log.Fatal("读取失败,",err)

    }

    log.Println("收到; ",student)

       

}

func send(client *websocket.Conn) {

    msg :=Student{

        Name:"daf",

        Gender: "男",

    }

    err := client.WriteJSON(&msg)

    if err != nil {

        log.Fatal(err)

    }

}

   

http://www.lryc.cn/news/584157.html

相关文章:

  • TCP-与-UDP-协议详解:原理、区别与应用场景全解析
  • 自动驾驶环境感知:天气数据采集与融合技术实战
  • 关键字前跟空格或首字母, 关键字后跟空格或标点符号; 标点符号后面不是必须跟空格;
  • Duplicate cleaner pro 的使用技巧
  • 汽车加气站操作工分类有几种
  • 制作一款打飞机游戏78:游戏选项
  • 城市脉搏中的隐形守护者
  • 羊肚菌自动采收车设计cad【7张】+三维图+设计说明书
  • U-Boot 2025.07 引入的 “uthreads” 优势介绍
  • 【三维重建】开源slam数据集介绍
  • ssh: connect to host github.com port 22: connection refused
  • 微服务架构下某汽车APP电商模块订单服务自动化测试方案(Python蹭个场)
  • 庄懂的水特效AP01/L16/Water
  • 【TCP/IP】10. 引导协议与动态主机配置协议
  • 汽车功能安全-软件集成和验证(Software Integration Verification)【目的、验证输入、集成验证要求】9
  • RHCE考试 ——笔记
  • 接口(上篇)
  • 编译OpenHarmony-4.0-Release RK3566 报错
  • 【保姆级教程】基于anji-plus-captcha实现行为验证码(滑动拼图+点选文字),前后端完整代码奉上!
  • 前端面试十一之TS
  • 电路研究9.4——合宙Air780EP的LuatOS、CSDK跟标准AT
  • 【Ubuntu】编译sentencepiece库
  • php中array($this, ‘loadClass‘)表示啥意思?
  • 【STM32 学习笔记】WDR看门狗
  • 在 Apple 生态中,`aarch64` 和 `arm64` 本质上是相同的架构
  • 解决问题:在cmd中能查看到pnpm版本,在vscode终端中却报错
  • Rust and the Linux Kernel
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十七天
  • 【世纪龙科技】汽车信息化综合实训考核平台(机电方向)-学测
  • 倍福套料VE变量和M函数新增配置