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\n", msg[:n])

	sendMsg := "訂單添加:" + string(msg[:n])
	_, err = ws.Write([]byte(sendMsg))
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Send: %s\n", 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\n", msg)

	sendMsg := "訂單刪除:" + msg
	err = websocket.Message.Send(ws, sendMsg)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Send: %s\n", 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\n", string(sendMsg))

	msg := make([]byte, 512)
	m, err := ws.Read(msg)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Receive: %s\n", 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\n", sendMsg)

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

func main() {
	add("小龍蝦")
	add("魚香肉絲")
	del("小龍蝦")
}

測試

啟動服務端代碼:
在這里插入圖片描述
運行客戶端代碼:
在這里插入圖片描述

服務端邏輯處理:
在這里插入圖片描述
這里客戶端是用后端代碼實現,當需要前端頁面與服務端進行交互時,可以將客戶端改成頁面請求調用,收到消息后顯示即可。

公眾號:李田路口

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM