Golang websocket 实现消息推送

服务端实现

package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	
	"golang.org/x/net/websocket"
)

func add(ws *websocket.Conn) {
	msg := make([]byte, 512)
	n, err := ws.Read(msg)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Receive: %s
", msg[:n])

	sendMsg := "订单添加:" + string(msg[:n])
	_, err = ws.Write([]byte(sendMsg))
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Send: %s
", sendMsg)
}

func del(ws *websocket.Conn) {
	var msg string
	err := websocket.Message.Receive(ws, &msg)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Receive: %s
", msg)

	sendMsg := "订单删除:" + msg
	err = websocket.Message.Send(ws, sendMsg)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Send: %s
", sendMsg)
}

func main() {
	http.Handle("/add", websocket.Handler(add))
	http.Handle("/del", websocket.Handler(del))
	fmt.Println("开始监听8888端口...")
	err := http.ListenAndServe(":8888", nil)
	if err != nil {
		log.Fatal(err)
	}
}

客户端实现

package main

import (
	"encoding/json"
	"fmt"
	"log"

	"golang.org/x/net/websocket"
)

func add(param string) {
	ws, err := websocket.Dial("ws://127.0.0.1:8888/add", "", "http://127.0.0.1:8888/")
	if err != nil {
		log.Fatal(err)
	}
	defer ws.Close() //关闭连接

	sendMsg := []byte(param)
	_, err = ws.Write(sendMsg)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Send: %s
", string(sendMsg))

	msg := make([]byte, 512)
	m, err := ws.Read(msg)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Receive: %s
", msg[:m])
}

func del(param string) {
	ws, err := websocket.Dial("ws://127.0.0.1:8888/del", "", "http://127.0.0.1:8888/")
	if err != nil {
		log.Fatal(err)
	}
	defer ws.Close() //关闭连接

	sendMsg := param
	err = websocket.Message.Send(ws, sendMsg)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Send: %s
", sendMsg)

	var msg string
	err = websocket.Message.Receive(ws, &msg)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Receive: %s
", msg)
}

func main() {
	add("小龙虾")
	add("鱼香肉丝")
	del("小龙虾")
}

测试

启动服务端代码:
在这里插入图片描述
运行客户端代码:
在这里插入图片描述

服务端逻辑处理:
在这里插入图片描述
这里客户端是用后端代码实现,当需要前端页面与服务端进行交互时,可以将客户端改成页面请求调用,收到消息后显示即可。

公众号:李田路口

原文地址:https://www.cnblogs.com/dubinyang/p/13977392.html