当前位置: 首页 > 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.dtcms.com/a/272874.html

相关文章:

  • vue3 td 标签优化时间显示
  • 穿梭时空的智慧向导:Deepoc具身智能如何赋予导览机器人“人情味”
  • 如何自动计算照片中光伏板数量:基于开源项目的自动识别光伏板计数解决方案
  • C++初阶-仿函数
  • 利萨如图形详解:原理与Python动态绘制
  • 数据库常见元数据表
  • .NET Framework 安装失败及异常情况 常用处理方法
  • 【前端】【Echarts】【Liquidfill 水球图】深入理解 ECharts Liquidfill 水球图:从入门到进阶
  • 解决飞牛 NAS 安装 OpenResty时的端口被占用问题!(如何解决飞牛Nas 80 443 端口被占用的问题)
  • C++ 模板参数展开
  • AI测试革命:从智能缺陷检测到自愈式测试框架的工业实践
  • 谷粒商城高级篇
  • 用GNU Radio生成Frank信号
  • Redisson 的分布式锁
  • 动态物体滤除算法
  • 全连接神经网络
  • AI教学设计助手:生成好教案的Prompt技术实战(二)
  • Java中实现线程安全的几种方式
  • 我做了一个在线工具导航网站!
  • Apache
  • 一招解决Win11桌面右键刷新BUG问题!
  • 高通跃龙IoT-IQ系列芯片深度解析:定位、特性与应用全景
  • 智能音视频-搭建可视化智能体
  • 机器学10——集成学习
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十七天
  • 汽车功能安全-软件集成和验证(Software Integration Verification)【目的、验证输入、集成验证要求】9
  • Synopsys 逻辑综合之 MultiBit Flip-Flop 与 ICG
  • 【TCP/IP】9. 域名系统(DNS)
  • Agent自动化与代码智能
  • 【更新至2023年】1998-2023年各地级市第一产业占GDP比重数据(全市)