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)
}
}