Golang websocket 实现消息推送

180it 2021-09-24 AM 1154℃ 0条

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("小龙虾")
}

这里客户端是用后端代码实现,当需要前端页面与服务端进行交互时,可以将客户端改成页面请求调用,收到消息后显示即可。

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

Golang websocket 实现消息推送